diff options
Diffstat (limited to 'driver/gator_annotate_kernel.c')
-rw-r--r-- | driver/gator_annotate_kernel.c | 132 |
1 files changed, 86 insertions, 46 deletions
diff --git a/driver/gator_annotate_kernel.c b/driver/gator_annotate_kernel.c index bc68fa8..67d2d6c 100644 --- a/driver/gator_annotate_kernel.c +++ b/driver/gator_annotate_kernel.c @@ -8,11 +8,13 @@ */ #define ESCAPE_CODE 0x1c -#define STRING_ANNOTATION 0x03 +#define STRING_ANNOTATION 0x06 +#define NAME_CHANNEL_ANNOTATION 0x07 +#define NAME_GROUP_ANNOTATION 0x08 #define VISUAL_ANNOTATION 0x04 #define MARKER_ANNOTATION 0x05 -static void kannotate_write(const char* ptr, unsigned int size) +static void kannotate_write(const char *ptr, unsigned int size) { int retval; int pos = 0; @@ -27,91 +29,129 @@ static void kannotate_write(const char* ptr, unsigned int size) } } -static void gator_annotate_code(char code) +void gator_annotate_channel(int channel, const char *str) { - int header = ESCAPE_CODE | (code << 8); - kannotate_write((char*)&header, sizeof(header)); + int str_size = strlen(str) & 0xffff; + long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16) | ((long long)str_size << 48); + kannotate_write((char *)&header, sizeof(header)); + kannotate_write(str, str_size); } -static void gator_annotate_code_str(char code, const char* string) -{ - int str_size = strlen(string) & 0xffff; - int header = ESCAPE_CODE | (code << 8) | (str_size << 16); - kannotate_write((char*)&header, sizeof(header)); - kannotate_write(string, str_size); -} +EXPORT_SYMBOL(gator_annotate_channel); -static void gator_annotate_code_color(char code, int color) +void gator_annotate(const char *str) { - long long header = (ESCAPE_CODE | (code << 8) | 0x00040000 | ((long long)color << 32)); - kannotate_write((char*)&header, sizeof(header)); + gator_annotate_channel(0, str); } -static void gator_annotate_code_color_str(char code, int color, const char* string) +EXPORT_SYMBOL(gator_annotate); + +void gator_annotate_channel_color(int channel, int color, const char *str) { - int str_size = (strlen(string) + 4) & 0xffff; - long long header = ESCAPE_CODE | (code << 8) | (str_size << 16) | ((long long)color << 32); - kannotate_write((char*)&header, sizeof(header)); - kannotate_write(string, str_size - 4); + int str_size = (strlen(str) + 4) & 0xffff; + char header[12]; + header[0] = ESCAPE_CODE; + header[1] = STRING_ANNOTATION; + *(u32 *)(&header[2]) = channel; + *(u16 *)(&header[6]) = str_size; + *(u32 *)(&header[8]) = color; + kannotate_write((char *)&header, sizeof(header)); + kannotate_write(str, str_size - 4); } -// String annotation -void gator_annotate(const char* string) +EXPORT_SYMBOL(gator_annotate_channel_color); + +void gator_annotate_color(int color, const char *str) { - gator_annotate_code_str(STRING_ANNOTATION, string); + gator_annotate_channel_color(0, color, str); } -EXPORT_SYMBOL(gator_annotate); -// String annotation with color -void gator_annotate_color(int color, const char* string) +EXPORT_SYMBOL(gator_annotate_color); + +void gator_annotate_channel_end(int channel) { - gator_annotate_code_color_str(STRING_ANNOTATION, color, string); + long long header = ESCAPE_CODE | (STRING_ANNOTATION << 8) | (channel << 16); + kannotate_write((char *)&header, sizeof(header)); } -EXPORT_SYMBOL(gator_annotate_color); -// Terminate an annotation +EXPORT_SYMBOL(gator_annotate_channel_end); + void gator_annotate_end(void) { - gator_annotate_code(STRING_ANNOTATION); + gator_annotate_channel_end(0); } + EXPORT_SYMBOL(gator_annotate_end); -// Image annotation with optional string -void gator_annotate_visual(const char* data, unsigned int length, const char* string) +void gator_annotate_name_channel(int channel, int group, const char* str) +{ + int str_size = strlen(str) & 0xffff; + char header[12]; + header[0] = ESCAPE_CODE; + header[1] = NAME_CHANNEL_ANNOTATION; + *(u32 *)(&header[2]) = channel; + *(u32 *)(&header[6]) = group; + *(u16 *)(&header[10]) = str_size; + kannotate_write((char *)&header, sizeof(header)); + kannotate_write(str, str_size); +} + +EXPORT_SYMBOL(gator_annotate_name_channel); + +void gator_annotate_name_group(int group, const char* str) +{ + int str_size = strlen(str) & 0xffff; + long long header = ESCAPE_CODE | (NAME_GROUP_ANNOTATION << 8) | (group << 16) | ((long long)str_size << 48); + kannotate_write((char *)&header, sizeof(header)); + kannotate_write(str, str_size); +} + +EXPORT_SYMBOL(gator_annotate_name_group); + +void gator_annotate_visual(const char *data, unsigned int length, const char *str) { - int str_size = strlen(string) & 0xffff; + int str_size = strlen(str) & 0xffff; int visual_annotation = ESCAPE_CODE | (VISUAL_ANNOTATION << 8) | (str_size << 16); - kannotate_write((char*)&visual_annotation, sizeof(visual_annotation)); - kannotate_write(string, str_size); - kannotate_write((char*)&length, sizeof(length)); + kannotate_write((char *)&visual_annotation, sizeof(visual_annotation)); + kannotate_write(str, str_size); + kannotate_write((char *)&length, sizeof(length)); kannotate_write(data, length); } + EXPORT_SYMBOL(gator_annotate_visual); -// Marker annotation void gator_annotate_marker(void) { - gator_annotate_code(MARKER_ANNOTATION); + int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8); + kannotate_write((char *)&header, sizeof(header)); } + EXPORT_SYMBOL(gator_annotate_marker); -// Marker annotation with a string -void gator_annotate_marker_str(const char* string) +void gator_annotate_marker_str(const char *str) { - gator_annotate_code_str(MARKER_ANNOTATION, string); + int str_size = strlen(str) & 0xffff; + int header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16); + kannotate_write((char *)&header, sizeof(header)); + kannotate_write(str, str_size); } + EXPORT_SYMBOL(gator_annotate_marker_str); -// Marker annotation with a color void gator_annotate_marker_color(int color) { - gator_annotate_code_color(MARKER_ANNOTATION, color); + long long header = (ESCAPE_CODE | (MARKER_ANNOTATION << 8) | 0x00040000 | ((long long)color << 32)); + kannotate_write((char *)&header, sizeof(header)); } + EXPORT_SYMBOL(gator_annotate_marker_color); -// Marker annotation with a string and color -void gator_annotate_marker_color_str(int color, const char* string) +void gator_annotate_marker_color_str(int color, const char *str) { - gator_annotate_code_color_str(MARKER_ANNOTATION, color, string); + int str_size = (strlen(str) + 4) & 0xffff; + long long header = ESCAPE_CODE | (MARKER_ANNOTATION << 8) | (str_size << 16) | ((long long)color << 32); + kannotate_write((char *)&header, sizeof(header)); + kannotate_write(str, str_size - 4); } + EXPORT_SYMBOL(gator_annotate_marker_color_str); |