Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions src/hyperion_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,17 @@ int hyperion_client(const char* origin, const char* hostname, int port, bool uni
int hyperion_read()
{
if (!sockfd)
return -1;
return -2;
uint8_t headbuff[4];
int n = read(sockfd, headbuff, 4);
uint32_t messageSize = ((headbuff[0] << 24) & 0xFF000000) | ((headbuff[1] << 16) & 0x00FF0000) | ((headbuff[2] << 8) & 0x0000FF00) | ((headbuff[3]) & 0x000000FF);
if (n < 0 || messageSize >= sizeof(recvBuff))
return -1;
if (n < 0)
return -3;
if (messageSize >= sizeof(recvBuff))
return -4;
n = read(sockfd, recvBuff, messageSize);
if (n < 0)
return -1;
return -5;
_parse_reply(hyperionnet_Reply_as_root(recvBuff));
return 0;
}
Expand Down
1 change: 0 additions & 1 deletion src/json_rpc_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#include "log.h"
#include <pbnjson.h>

#define RPC_PORT 8090

typedef enum _AmbientLightingDaemon {
DAEMON_INVALID = -1,
Expand Down
7 changes: 6 additions & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ static const struct option long_options[] = {
{ "height", required_argument, 0, 'y' },
{ "address", required_argument, 0, 'a' },
{ "port", required_argument, 0, 'p' },
{ "web-port", required_argument, 0, 'w' },
{ "unix-socket", no_argument, 0, 'l' },
{ "fps", required_argument, 0, 'f' },
{ "no-video", no_argument, 0, 'V' },
Expand Down Expand Up @@ -59,6 +60,7 @@ static void print_usage()
printf(" -y, --height=HEIGHT Height of video frame (default 108)\n");
printf(" -a, --address=ADDR IP address of Hyperion server\n");
printf(" -p, --port=PORT Port of Hyperion flatbuffers server (default 19400)\n");
printf(" -w, --web-port=PORT Port of Hyperion RPC/web server (default 8090)\n");
printf(" -l, --unix-socket Connect through unix socket\n");
printf(" -f, --fps=FPS Framerate for sending video frames (default 0 = unlimited)\n");
printf(" -b, --backend=BE Use specific video capture backend (default auto)\n");
Expand All @@ -83,7 +85,7 @@ static int parse_options(int argc, char* argv[])
int opt, longindex;
int ret;

while ((opt = getopt_long(argc, argv, "x:y:a:p:f:b:u:q:c:lvnhdVGrst", long_options, &longindex)) != -1) {
while ((opt = getopt_long(argc, argv, "x:y:a:p:w:f:b:u:q:c:lvnhdVGrst", long_options, &longindex)) != -1) {
switch (opt) {
case 'x':
settings.width = atoi(optarg);
Expand All @@ -98,6 +100,9 @@ static int parse_options(int argc, char* argv[])
case 'p':
settings.port = atol(optarg);
break;
case 'w':
settings.web_port = atol(optarg);
break;
case 'l':
settings.unix_socket = true;
break;
Expand Down
10 changes: 6 additions & 4 deletions src/service.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ extern bool LSRegisterPubPriv(const char* name, LSHandle** sh,
void* connection_loop(void* data)
{
service_t* service = (service_t*)data;
int res;
DBG("Starting connection loop");
while (service->connection_loop_running) {
INFO("Connecting hyperion-client..");
Expand All @@ -36,8 +37,9 @@ void* connection_loop(void* data)
INFO("hyperion-client connected!");
service->connected = true;
while (service->connection_loop_running) {
if (hyperion_read() < 0) {
ERR("Error! Connection timeout.");
res = hyperion_read();
if (res < 0) {
ERR("Error! Connection timeout our error code: %d errno: %s", res, strerror(errno));
break;
}
}
Expand Down Expand Up @@ -457,7 +459,7 @@ static bool videooutput_callback(LSHandle* sh __attribute__((unused)), LSMessage
INFO("videooutput_callback: hdrType: %s", hdr_type_str);

DynamicRange range = get_dynamic_range(hdr_type_str);
int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, RPC_PORT, range);
int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, service->settings->web_port, range);
if (ret != 0) {
ERR("videooutput_callback: set_hdr_state failed, ret: %d", ret);
}
Expand Down Expand Up @@ -506,7 +508,7 @@ static bool picture_callback(LSHandle* sh __attribute__((unused)), LSMessage* ms
INFO("picture_callback: dynamicRange: %s", dynamic_range_str);

DynamicRange range = get_dynamic_range(dynamic_range_str);
int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, RPC_PORT, range);
int ret = set_hdr_state(service->settings->unix_socket ? "127.0.0.1" : service->settings->address, service->settings->web_port, range);
if (ret != 0) {
ERR("videooutput_callback: set_hdr_state failed, ret: %d", ret);
}
Expand Down
4 changes: 4 additions & 0 deletions src/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ void settings_init(settings_t* settings)

settings->address = strdup("");
settings->port = 19400;
settings->web_port = 8090;
settings->priority = 150;
settings->unix_socket = false;

Expand Down Expand Up @@ -54,6 +55,8 @@ int settings_load_json(settings_t* settings, jvalue_ref source)
}
if ((value = jobject_get(source, j_cstr_to_buffer("port"))) && jis_number(value))
jnumber_get_i32(value, &settings->port);
if ((value = jobject_get(source, j_cstr_to_buffer("web-port"))) && jis_number(value))
jnumber_get_i32(value, &settings->web_port);
if ((value = jobject_get(source, j_cstr_to_buffer("priority"))) && jis_number(value))
jnumber_get_i32(value, &settings->priority);
if ((value = jobject_get(source, j_cstr_to_buffer("unix-socket"))) && jis_boolean(value))
Expand Down Expand Up @@ -94,6 +97,7 @@ int settings_save_json(settings_t* settings, jvalue_ref target)

jobject_set(target, j_cstr_to_buffer("address"), jstring_create(settings->address));
jobject_set(target, j_cstr_to_buffer("port"), jnumber_create_i32(settings->port));
jobject_set(target, j_cstr_to_buffer("web_port"), jnumber_create_i32(settings->web_port));
jobject_set(target, j_cstr_to_buffer("priority"), jnumber_create_i32(settings->priority));
jobject_set(target, j_cstr_to_buffer("unix-socket"), jboolean_create(settings->unix_socket));

Expand Down
1 change: 1 addition & 0 deletions src/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ typedef struct _settings_t {

char* address;
int port;
int web_port;
int priority;
bool unix_socket;

Expand Down