Skip to content

Commit

Permalink
Handle messages streamed
Browse files Browse the repository at this point in the history
  • Loading branch information
McZonk committed Sep 16, 2012
1 parent 59d9f48 commit 1aa2182
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 75 deletions.
37 changes: 0 additions & 37 deletions Message.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,54 +4,17 @@ namespace RGBStrip {

class Message {
public:
static const uint16_t MaxLength = 520;

static const uint8_t Identifier = 0x42;

struct Header {
uint8_t identifier;
uint8_t type;

uint16_t checksum;
uint16_t length;
uint16_t code;
};

public:
Header header;
unsigned char data[0];

public:
uint16_t calcChecksum() const {
const uint16_t length = header.length - sizeof(header);

uint16_t checksum = header.type;
for(uint16_t index = 0; index < length; ++index)
{
checksum += data[index];
}

return checksum;
}

void fillChecksum()
{
header.checksum = calcChecksum();
}

bool validateChecksum() const
{
if(header.identifier != Identifier)
{
return false;
}

if(header.checksum != calcChecksum())
{
return false;
}

return true;
}
};
}
4 changes: 0 additions & 4 deletions REDLEDClient/RGBSCViewController.mm
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,6 @@ - (void)bindToNetService:(NSNetService*)netService
message.colors[index] = HSBColor((uint16_t)(rand() % 1536), (uint8_t)(rand() % 255), (uint8_t)(rand() % 256));
}

message.fillChecksum();

NSLog(@"%@ success:%d", data, [self.socket sendData:data]);
#endif
}
Expand Down Expand Up @@ -156,8 +154,6 @@ - (IBAction)sliderChanged:(id)sender

message.color = HSBColor(h, s, b);

message.fillChecksum();

NSLog(@"%@ success:%d", data, [self.socket sendData:data]);
}

Expand Down
71 changes: 37 additions & 34 deletions RGBStrip.ino
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@

EthernetUDP socket;

char messageData[RGBStrip::Message::MaxLength];

LPD8806 ledStrip = LPD8806(LedStripLedCount, LedStripDataPin, LedStripClockPin);


Expand Down Expand Up @@ -71,74 +69,79 @@ void loop()
// Maintain Bonjour
EthernetBonjour.run();

int messageSize = socket.parsePacket();
if(messageSize > sizeof(messageData))
{
// oversized packet, read until done
for(int i = 0; i < messageSize; i += sizeof(messageData))
{
socket.read(messageData, sizeof(messageData));
}
}
else if(messageSize > 0)
{
socket.read(messageData, messageSize);
int messageLength = socket.parsePacket();
if(messageLength > 0) {
RGBStrip::Message::Header header;

const RGBStrip::Message& message = *(RGBStrip::Message*)messageData;
socket.readBytes((char*)&header, sizeof(header));

if(!message.validateChecksum())
{

}
else
{
switch(message.header.type) {
if(messageLength == header.length) {
switch(header.type) {
case RGBStrip::ColorMessage::Type :

void handleMessage(const RGBStrip::ColorMessage& message);
handleMessage((const RGBStrip::ColorMessage&)message);
void handleColorMessage(Stream& stream);
handleColorMessage(socket);
break;

case RGBStrip::ColorArrayMessage::Type :

void handleMessage(const RGBStrip::ColorArrayMessage& message);
handleMessage((const RGBStrip::ColorArrayMessage&)message);
void handleColorArrayMessage(Stream& stream);
handleColorArrayMessage(socket);
break;

default :

break;
}
}

// empty the buffer
while(socket.available() > 0) {
socket.read();
}
}

delay(1);
}

void handleMessage(const RGBStrip::ColorMessage& message) {
int offset = message.offset;
int count = message.count;
void handleColorMessage(Stream& stream) {
uint16_t offset = 0;
stream.readBytes((char*)&offset, sizeof(offset));

uint16_t count = 0;
stream.readBytes((char*)&count, sizeof(count));

if(count > ledStrip.numPixels() - offset) {
count = ledStrip.numPixels() - offset;
}

RGBColor rgbColor = HSBColor(message.color.h, message.color.s, message.color.b);
HSBColor hsbColor;
stream.readBytes((char*)&hsbColor, sizeof(hsbColor));

RGBColor rgbColor = hsbColor;

for(int i = 0; i <= count; ++i) {
ledStrip.setPixelColor(offset + i, GammaCorretion(rgbColor.r), GammaCorretion(rgbColor.g), GammaCorretion(rgbColor.b));
}
ledStrip.show();
}

void handleMessage(const RGBStrip::ColorArrayMessage& message) {
int offset = message.offset;
int count = message.count;
void handleColorArrayMessage(Stream& stream) {
uint16_t offset = 0;
stream.readBytes((char*)&offset, sizeof(offset));

uint16_t count = 0;
stream.readBytes((char*)&count, sizeof(count));

if(count > ledStrip.numPixels() - offset) {
count = ledStrip.numPixels() - offset;
}

for(int i = 0; i <= count; ++i) {
RGBColor rgbColor = HSBColor(message.colors[i].h, message.colors[i].s, message.colors[i].b);
HSBColor hsbColor;
stream.readBytes((char*)&hsbColor, sizeof(hsbColor));

RGBColor rgbColor = hsbColor;

ledStrip.setPixelColor(offset + i, GammaCorretion(rgbColor.r), GammaCorretion(rgbColor.g), GammaCorretion(rgbColor.b));
}
Expand Down

0 comments on commit 1aa2182

Please sign in to comment.