# include "Arduino.h"
# include "SerialChannel.h"
byte SerialChannel : : nextId = 1 ;
SerialChannel * SerialChannel : : first = 0 ;
SerialChannel : : SerialChannel ( const char * name_ )
: next ( 0 )
, id ( ( byte ) - 1 )
, name ( name_ )
{
if ( first = = 0 )
first = this ;
else
{
SerialChannel * c = first ;
while ( c - > next ! = 0 ) c = c - > next ;
c - > next = this ;
}
id = nextId + + ;
}
void SerialChannel : : write ( byte * data , short byteCount , unsigned long time )
{
beginWrite ( byteCount , time ) ;
continueWrite ( data , byteCount ) ;
}
void SerialChannel : : beginWrite ( short byteCount , unsigned long time )
{
if ( time = = ( unsigned long ) - 1 )
time = micros ( ) ;
handleConnection ( ) ;
Serial . write ( " START " ) ;
Serial . write ( id ) ;
writeULong ( time ) ;
writeShort ( byteCount ) ;
}
void SerialChannel : : continueWrite ( byte * data , short byteCount )
{
Serial . write ( data , byteCount ) ;
}
void SerialChannel : : write ( const char * text , unsigned long time )
{
write ( ( byte * ) text , strlen ( text ) , time ) ;
}
void SerialChannel : : writeShort ( short num )
{
Serial . write ( ( byte * ) & num , 2 ) ;
}
void SerialChannel : : writeULong ( unsigned long num )
{
Serial . write ( ( byte * ) & num , 4 ) ;
}
void SerialChannel : : handleConnection ( )
{
int b = Serial . read ( ) ;
if ( b = = ( int ) ' C ' )
{
Serial . write ( " CONNECTION " ) ;
SerialChannel * c = first ;
while ( c )
{
Serial . write ( " START " ) ;
Serial . write ( 0 ) ;
Serial . write ( " ChannelInit " ) ;
Serial . write ( c - > id ) ;
writeShort ( strlen ( c - > name ) ) ;
Serial . write ( c - > name ) ;
c = c - > next ;
}
}
}