Pages: [1]   Go Down
Author Topic: Quien me ayuda a descifrar código en comunicación entre MediaCoder y Arduino  (Read 614 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 13
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 Hola comunidad, tengo una curiosidad, me tiene bastante loco el tratar de entender este código en su parte de lectura de datos del puerto serial. Quisiera que alguien me lo explicara, bueno en si la parte de entrada de datos.

En materia es entender como el Programa MediaCoder, envía la trama de datos a través del puerto serial y como arduino la decodifica,
si bien yo la puedo leer lo único que veo son caracteres ASCII no imprimibles o de flujo de control a travez del terminal.

Code:
/*************************************************************************
* MediaCoder Stats Display for Arduino (with LCD8448)
* Distributed under GPL
*
* Copyright (c) 2012 Stanley Huang <stanleyhuangyc@gmail.com>
* All rights reserved.
**************************************************************************/

#include "LCD4884.h"

typedef struct {
short pid;
short value;
} STAT_DATA;

#define PID_STATS_STATE 0x1000
#define PID_STATS_PROGRESS 0x1001
#define PID_STATS_FPS 0x1002
#define PID_STATS_SPEED 0x1003
#define PID_STATS_FRAMES 0x1004
#define PID_STATS_POS 0x1005
#define PID_STATS_VBITRATE 0x1006
#define PID_STATS_ABITRATE 0x1007
#define PID_STATS_ELAPSED_TIME 0x1008
#define PID_STATS_REMAIN_TIME 0x1009
#define PID_STATS_CPU 0x1100
#define PID_STATS_CPU_DECODING 0x1101
#define PID_STATS_CPU_ENCODING 0x1102
#define PID_STATS_CPU_FREQ 0x1103

void setup()
{
 
  lcd.LCD_init();
  lcd.LCD_clear();

  Serial.begin(9600);
}

STAT_DATA data;
char idx = 0;

void display()
{
char buf[16];
char n;
switch (data.pid) {
case PID_STATS_STATE:
if (data.value == 0) {
lcd.LCD_write_string(0, 0, "  COMPLETED  ", MENU_HIGHLIGHT);
lcd.LCD_write_string(60, 4, "    ", MENU_NORMAL);
lcd.LCD_write_string(60, 5, "    ", MENU_NORMAL);
} else if (data.value == 1) {
lcd.LCD_write_string(0, 0, "  STARTING...", MENU_HIGHLIGHT);
} else if (data.value == 2) {
lcd.LCD_write_string(0, 0, "   STOPPED    ", MENU_HIGHLIGHT);
}
break;
case PID_STATS_FRAMES:
sprintf(buf, "%4d0 Frames ", data.value);
lcd.LCD_write_string(0, 0, buf, MENU_HIGHLIGHT);
break;
case PID_STATS_PROGRESS:
sprintf(buf, "%3d%%", data.value);
lcd.LCD_write_string(60, 4, buf, MENU_NORMAL);
break;
case PID_STATS_FPS:
n = sprintf(buf, "%d.%01d", data.value / 10, data.value % 10);
lcd.LCD_write_string_big((5 - n) * 12, 1, buf, MENU_NORMAL);
lcd.LCD_write_string(54, 3, "fps", MENU_NORMAL);
break;
case PID_STATS_SPEED:
sprintf(buf, "%2d.%01dx", data.value / 10, data.value % 10);
lcd.LCD_write_string(54, 2, buf, MENU_NORMAL);
break;
case PID_STATS_POS:
sprintf(buf, "Pos:%02d:%02d", data.value / 60, data.value % 60);
lcd.LCD_write_string(0, 4, buf, MENU_NORMAL);
break;
case PID_STATS_CPU:
sprintf(buf, "%3d%%", data.value);
lcd.LCD_write_string(60, 5, buf, MENU_NORMAL);
break;
case PID_STATS_CPU_FREQ:
sprintf(buf, "CPU:%d.%2dG", data.value / 1000, (data.value % 1000) / 10);
lcd.LCD_write_string(0, 5, buf, MENU_NORMAL);
break;
}
}

/* loop */
void loop()
{
if (Serial.available()) {
char* ptr = (char*)&data;
char c = Serial.read();
ptr[idx] = c;
if (++idx == 4) {
idx = 0;
display();
}
}
}


esto es lo que yo visualizo en el terminal  smiley-roll-sweat



si alguien me puede echar una mano lo agradeceria.
Logged

Pages: [1]   Go Up
Jump to: