7
7
#include <stdlib.h>
8
8
#include <string.h>
9
9
#include <sys/poll.h>
10
+ #include <time.h>
10
11
11
12
#include <SFML/Graphics.h>
12
13
#include <SFML/Window.h>
37
38
38
39
static volatile sig_atomic_t quit = 0 ;
39
40
sfTexture * font ;
41
+ sfSprite * font_sprite ;
40
42
sfRenderWindow * window ;
41
43
uint8_t character_map [OSD_WIDTH ][OSD_HEIGHT ];
42
44
displayport_vtable_t * display_driver ;
@@ -68,12 +70,9 @@ static void draw_screen()
68
70
DEBUG_PRINT ("%c" , c > 31 ? c : 20 );
69
71
sfIntRect r = {0 , FONT_HEIGHT * c , FONT_WIDTH , FONT_HEIGHT };
70
72
sfVector2f dest = {(x * FONT_WIDTH ) + X_OFFSET , y * FONT_HEIGHT };
71
- sfSprite * sprite = sfSprite_create ();
72
- sfSprite_setTexture (sprite , font , 0 );
73
- sfSprite_setTextureRect (sprite , r );
74
- sfSprite_setPosition (sprite , dest );
75
- sfRenderWindow_drawSprite (window , sprite , NULL );
76
- sfSprite_destroy (sprite );
73
+ sfSprite_setTextureRect (font_sprite , r );
74
+ sfSprite_setPosition (font_sprite , dest );
75
+ sfRenderWindow_drawSprite (window , font_sprite , NULL );
77
76
}
78
77
DEBUG_PRINT (" " );
79
78
}
@@ -108,6 +107,8 @@ int main(int argc, char *args[])
108
107
window = sfRenderWindow_create (videoMode , "MSP OSD" , 0 , NULL );
109
108
sfRenderWindow_display (window );
110
109
font = sfTexture_createFromFile ("bold.png" , NULL );
110
+ font_sprite = sfSprite_create ();
111
+ sfSprite_setTexture (font_sprite , font , 0 );
111
112
112
113
display_driver = calloc (1 , sizeof (displayport_vtable_t ));
113
114
display_driver -> draw_character = & draw_character ;
@@ -121,10 +122,21 @@ int main(int argc, char *args[])
121
122
int recv_len = 0 ;
122
123
uint8_t buffer [4096 ];
123
124
125
+ struct timespec fps_start , now ;
126
+ uint32_t message_counter = 0 ;
127
+ clock_gettime (CLOCK_MONOTONIC , & fps_start );
128
+
124
129
printf ("started up, listening on port %d\n" , PORT );
125
130
126
131
while (!quit )
127
132
{
133
+ clock_gettime (CLOCK_MONOTONIC , & now );
134
+ if (now .tv_sec > fps_start .tv_sec ) {
135
+ clock_gettime (CLOCK_MONOTONIC , & fps_start );
136
+ printf ("Got %d messages in the last second\n" , message_counter );
137
+ message_counter = 0 ;
138
+ }
139
+
128
140
sfEvent event ;
129
141
sfRenderWindow_pollEvent (window , & event );
130
142
@@ -143,12 +155,14 @@ int main(int argc, char *args[])
143
155
socklen_t src_addr_len = sizeof (src_addr );
144
156
if (0 < (recv_len = recvfrom (socket_fd ,& buffer ,sizeof (buffer ),0 ,(struct sockaddr * )& src_addr ,& src_addr_len )))
145
157
{
146
- for (int i = 0 ; i < recv_len ; i ++ )
158
+ message_counter ++ ;
159
+ for (int i = 0 ; i < recv_len ; i ++ )
147
160
msp_process_data (msp_state , buffer [i ]);
148
161
}
149
162
}
150
163
}
151
164
sfRenderWindow_close (window );
165
+ sfSprite_destroy (font_sprite );
152
166
sfTexture_destroy (font );
153
167
sfRenderWindow_destroy (window );
154
168
free (msp_state );
0 commit comments