diff --git a/doc/tech_report.tex b/doc/tech_report.tex index 7e16d808cb28ce059324cab249850383e8776e03..71746dd8b56887946b78aa0826225428f23b9194 100644 --- a/doc/tech_report.tex +++ b/doc/tech_report.tex @@ -1,6 +1,7 @@ % *** en embryo of a technical report describing the labcomm design rationale and implementation *** \documentclass[a4paper]{article} +\usepackage{listings} %\usepackage{verbatims} %\usepackage{todo} @@ -253,73 +254,29 @@ But With the following `example.lc` file: -\begin{verbatim} -sample struct { - int sequence; - struct { - boolean last; - string data; - } line[_]; -} log_message; -sample float data; -\end{verbatim} - +\lstinputlisting[basicstyle=\footnotesize]{../examples/wiki_example/example.lc} and this \verb+example_encoder.c+ file +\lstinputlisting[basicstyle=\footnotesize,language=C]{../examples/wiki_example/example_encoder.c} -\begin{verbatim} -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <labcomm_fd_reader.h> -#include <labcomm_fd_writer.h> -#include "example.h" - -int main(int argc, char *argv[]) { - int fd; - struct labcomm_encoder *encoder; - int i, j; - - fd = open("example.encoded", O_WRONLY|O_CREAT|O_TRUNC, 0644); - encoder = labcomm_encoder_new(labcomm_fd_writer, &fd); - labcomm_encoder_register_example_log_message(encoder); - labcomm_encoder_register_example_data(encoder); - for (i = 0 ; i < argc ; i++) { - example_log_message message; - - message.sequence = i + 1; - message.line.n_0 = i; - message.line.a = malloc(message.line.n_0*sizeof(message.line)); - for (j = 0 ; j < i ; j++) { - message.line.a[j].last = (j == message.line.n_0 - 1); - message.line.a[j].data = argv[j + 1]; - } - labcomm_encode_example_log_message(encoder, &message); - free(message.line.a); - } - for (i = 0 ; i < argc ; i++) { - float f = i; - labcomm_encode_example_data(encoder, &f); - } -} -\end{verbatim} Running \verb+./example_encoder one two+, will yield the following result in example.encoded: - - \begin{verbatim} -00000000 02 40 0b 6c 6f 67 5f 6d 65 73 73 61 67 65 11 02 |.@.log_message..| -00000010 08 73 65 71 75 65 6e 63 65 23 04 6c 69 6e 65 10 |.sequence#.line.| -00000020 01 00 11 02 04 6c 61 73 74 20 04 64 61 74 61 27 |.....last .data'| -00000030 02 41 04 64 61 74 61 25 40 00 00 00 01 00 40 00 |.A.data%@.....@.| -00000040 00 00 02 01 01 03 6f 6e 65 40 00 00 00 03 02 00 |......one@......| -00000050 03 6f 6e 65 01 03 74 77 6f 41 00 00 00 00 41 3f |.one..twoA....A?| -00000060 80 00 00 41 40 00 00 00 |...A@...| -00000068 +00000000 01 0c 0b 4c 61 62 43 6f 6d 6d 32 30 31 34 02 30 |...LabComm2014.0| +00000010 40 0b 6c 6f 67 5f 6d 65 73 73 61 67 65 22 11 02 |@.log_message"..| +00000020 08 73 65 71 75 65 6e 63 65 23 04 6c 69 6e 65 10 |.sequence#.line.| +00000030 01 00 11 02 04 6c 61 73 74 20 04 64 61 74 61 27 |.....last .data'| +00000040 02 08 41 04 64 61 74 61 01 25 40 04 00 00 00 01 |..A.data.%@.....| +00000050 00 40 09 00 00 00 02 01 01 03 6f 6e 65 40 0e 00 |.@........one@..| +00000060 00 00 03 02 00 03 6f 6e 65 01 03 74 77 6f 41 04 |......one..twoA.| +00000070 00 00 00 00 41 04 3f 80 00 00 41 04 40 00 00 00 |....A.?...A.@...| +00000080 \end{verbatim} i.e., \begin{verbatim} -<sample_decl> <user_id: 0x40> <string: <len: 11> <"log_message"> +<version> <length: 12> <string: <len: 11> <"LabComm2014">> +<sample_decl> <length: 48 <user_id: 0x40> <string: <len: 11> <"log_message"> + <signature_length: 34> <struct_decl: <number_of_fields: 2> <string: <len: 8> <"sequence"> <type: <integer_type>> @@ -332,8 +289,11 @@ i.e., >> > > -<sample_decl> <user_id: 0x41> - ... +<sample_decl> <length: 8> <user_id: 0x41> <string: <len: 4> <"data">> + <signature_length: 1> <float_type> +<sample_data> <user_id: 40> <length: 4> <packed_sample_data> +<sample_data> <user_id: 40> <length: 9> <packed_sample_data> +<sample_data> <user_id: 40> <length: 14> <packed_sample_data> \end{verbatim} \section{Ideas/Discussion}: