quarta-feira, setembro 20, 2006
quarta-feira, setembro 06, 2006
segunda-feira, setembro 04, 2006
A Microsoft liberou (para Testers) o Windows Vista RC 1 (build 5600). Analistas esperam que a Microsoft libere esta versão para o público em geral em 07/09.
Aqui você encontra outra review sobre o RC1.
[+/-] mostrar/esconder este post
quinta-feira, julho 27, 2006
Um dos elementos apresentados foi uma "janela" chamada "Frames". Mas o que é um frame? Este conceito é muito usado na área de comunicação de dados, neste caso específico de comunicação via porta serial. Um frame é um conjunto de dados com início e fim bem definidos.
Por exemplo em comunicação de dados via porta serial frames são delimitados por caracteres de controle como STX e ETX.
Um dos principais recursos do SerialWizard é ser capaz de carregar um arquivo com a definição de um frame e, a medida que os dados são recebidos e/ou enviados, separar os diversos elementos (fields) deste frame.
Este arquivo (XML) possui a seguinte sintaxe:
Created with colorer-take5 library. Type 'xml'Neste exemplo definimos um "frame" com o seguinte formato:
<?xml version="1.0" encoding="ISO-8859-1"?>
<protocol>
<frame>
<stx />
<len length='2' encoding='int/hex-string'/>
<payload length='[len]'>
<signature length='4' /> <!-- <signature value='xxx' /> not supported -->
<command length='3' mapping='commands'/>
<status length='1' mapping='status'/>
<data />
</payload>
<etx/>
<lrc length='1' />
</frame>
<commands>
<item value='001' description='Command 1' />
<item value='002' description='Command 2' />
</commands>
<status>
<item value='004' description='status 004' />
<item value='008' description='status 008' />
</status>
</protocol>
- Primeiro campo é o caracter de controle STX
- O segundo campo (Len) possui 2 bytes de tamanho e representa um número inteiro em uma string hexadecimal (por exemplo "12" ou 18 em decimal).
- O próximo campo (payload) possui len bytes de tamanho (ou seja, se o valor do campo len for "15" (em hexa) então este campo possui 21 bytes) e possi os seguintes subcampos:
- signature, com 4 bytes
- command, com 3 bytes
- status, com 1 byte
- e data com len - 4 - 3- 1 bytes.
- Caracter de controle ETX
- LRC com 1 byte.
Abaixo apresentamos a janela principal do programa após a carga de dados formatados segundo o frame acima:
Observe que a janela "frames" foi populada com a estrutura exata do frame. Além disso podemos selecionar os dados relativos ao campo do frame clicando no respectivo checkbox na janela frames (observe o campo data).
No próximo post farei uma breve explicação sobre os elementos que definem um frame.
Abraços.
Adriano
[+/-] mostrar/esconder este post
terça-feira, julho 25, 2006
Como comentei no último post, vou descrever melhor as funcionalidades do SerialWizard; abaixo segue um screenshot da tela principal do programa.
Nesta figura podemos observar alguns elementos:
- Data window.
- Frames window.
- Detail window.
os quais descreverei individualmente:
Data Window
Este é a janela mais simples de se entender. A mesma apresenta os dados (em hexadecimal) enviados/recebidos pela porta serial ou dados carregados de um arquivo. Nela podemos selecionar dados, navegar pelos mesmos (com as teclas de navegação) além de realizar buscas (básicas na versão corrente).
Esta janela é dividida em duas "sub-janelas": uma para apresentar os dados em hexadecimal e outra para apresentar os dados como strings. Observe que ao selecionar um (ou mais bytes) em uma destas "sub-janelas" os bytes correspondentes na outra também serão selecionados.
Frames
Esta janela apresenta uma visão mais estruturada
dos dados visualizados na janela data; em outras palavras nesta janela temos uma visão dos diversos campos (fields) que compõe um buffer. Este recurso é útil para analizarmos protocolos pois nos permite visualizar mais rapidamente os diversos campos do mesmo.Para que este recurso esteja habiltiado é necessário que o programa conheça a estrutura do protocolo (saiba fazer parse do protocolo). Em um próximo post veremos como "ensinar" o programa a fazer parse de um protocolo.
Observe que ao selecionarmos um (ou mais) campo(s) (através do checkbox da treeview) os dados correspondentes serão selecionados.
Details
A janela details possui duas tabs: Details e Commands.
A primeira apresenta os dados selecionados em um (ou mais) formato(s) selecionado(s) (levando-se em consideração os respectivos tamanhos dos tipos de dado). Por exemplo se Signed16 estiver marcado e dois ou mais bytes (16 ou mais bits) estiverem selecionados o valor correspondente aos dados selecionados convertidos para um número sinalizado de 16 bits será apresentado.
A segunda tab (commands) é utilizada para enviar dados pela porta serial.
[+/-] mostrar/esconder este post
segunda-feira, julho 24, 2006
- Cálculo automático de LRC.
- Tratamento de dados no formato hexadecimal
- Bugs: O programa possuía vários erros e eu não tinha acesso ao código fonte.
- Recursos não implementados
- Visualização de dados no formato Hexadecimal
- Envio de dados pela porta serial com suporte a cálculo automático de LRC e tratamento de dados hexadecimal
- Parse de "frames", ou seja, dado um buffer contendo um frame separar os vários campos deste frame
Neste final de semana liberei a primeira versão (ainda em alpha e com vários bugs e funcionalidades ainda não implementadas). no sourceforge. Na medida do possível implementarei novas funcionalidades e corrigirei bugs no mesmo.
Ao longo dos próximos posts irei descrever as principais funcionalidades do programa; mas não espere por isso! Baixe o mesmo e comece a brincar agora mesmo! :)
Abraços.
Adriano
[+/-] mostrar/esconder este post
quarta-feira, julho 12, 2006
Created with colorer-take5 library. Type 'csharp'
0: using System;
1: using System.Windows.Forms;
2: using System.Threading;
3:
4: namespace TestWinForm
5: {
6: public partial class TestCallBackFromDiferentThread : Form
7: {
8: private System.Threading.Thread workerThread;
9:
10: public TestCallBackFromDiferentThread()
11: {
12: InitializeComponent();
13: }
14:
15: private void button1_Click(object sender, EventArgs e)
16: {
17: ThreadStart ts = new ThreadStart(AddNewLine);
18: workerThread = new Thread(ts);
19: workerThread.Start();
20: }
21:
22: private void AddNewLine()
23: {
24: listBox1.Items.Add(textBox1.Text);
25: }
26: }
27: }
Bom, a resposta eu posto depois!
Adriano
[+/-] mostrar/esconder este post