Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
przemyslawzygmunt committed Dec 17, 2022
2 parents a296506 + e536dd8 commit 7939dce
Show file tree
Hide file tree
Showing 100 changed files with 1,241 additions and 817 deletions.
9 changes: 8 additions & 1 deletion extras/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,16 @@ FROM debian:11.3

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get -y install git vim wget procps build-essential libssl-dev libmariadb-dev-compat mariadb-client net-tools valgrind cppcheck cmake clang-format python3-pip rsyslog libgtest-dev libgmock-dev
RUN apt-get -y install git vim wget procps build-essential libssl-dev libmariadb-dev-compat mariadb-client net-tools valgrind cppcheck cmake clang-format python3-pip rsyslog libgtest-dev libgmock-dev screen
RUN pip install cpplint
RUN mkdir -p /etc/supla-server
RUN cd /usr/src/ && \
wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.5.3.tar.gz && \
tar zxvf libressl-3.5.3.tar.gz && \
cd libressl-3.5.3 && \
./configure --prefix /usr/src/libressl && \
make all && \
make install

WORKDIR /CProjects/supla-core/supla-server

Expand Down
27 changes: 16 additions & 11 deletions sql/TestDatabaseStructureAndData.sql

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion supla-client/Android/jni/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ LOCAL_MODULE := libsuplaclient
LOCAL_STATIC_LIBRARIES := cpufeatures
LOCAL_LDLIBS := -llog -landroid
LOCAL_SHARED_LIBRARIES = ssl crypto
LOCAL_CFLAGS += -DSRPC_WITHOUT_IN_QUEUE -DSRPC_WITHOUT_OUT_QUEUE -DSPROTO_WITHOUT_OUT_BUFFER -DUSE_DEPRECATED_EMEV_V1 -fPIC
LOCAL_CFLAGS += -DSRPC_WITHOUT_IN_QUEUE -DSRPC_WITHOUT_OUT_QUEUE -DSPROTO_WITHOUT_OUT_BUFFER -DUSE_DEPRECATED_EMEV_V1 -fPIC -g

LOCAL_SRC_FILES := supla.cpp \
main.cpp \
Expand Down
2 changes: 1 addition & 1 deletion supla-client/Android/jni/actions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ void getActionExecutionCallParams(JNIEnv *env, jobject action_params,
(*rgbw_param)->ColorBrightness = supla_CallShortMethod(
env, cls, action_params, "getColorBrightness", "()S");
(*rgbw_param)->Color =
supla_CallLongMethod(env, cls, action_params, "getColor", "()J");
(jlong)supla_CallLongMethod(env, cls, action_params, "getColor", "()J");
(*rgbw_param)->ColorRandom =
supla_CallBooleanMethod(env, cls, action_params, "getColorRandom",
"()Z")
Expand Down
54 changes: 33 additions & 21 deletions supla-client/Android/jni/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -593,11 +593,12 @@ void supla_channel_em_addsummary(TAndroidSuplaClient *asc, JNIEnv *env,
cls, "<init>",
"(Lorg/supla/android/lib/SuplaChannelElectricityMeterValue;JJJJ)V");

jobject sum_obj = env->NewObject(cls, methodID, parent,
em_ev->total_forward_active_energy[phase],
em_ev->total_reverse_active_energy[phase],
em_ev->total_forward_reactive_energy[phase],
em_ev->total_reverse_reactive_energy[phase]);
jlong fae = em_ev->total_forward_active_energy[phase];
jlong rae = em_ev->total_reverse_active_energy[phase];
jlong fre = em_ev->total_forward_reactive_energy[phase];
jlong rre = em_ev->total_reverse_reactive_energy[phase];

jobject sum_obj = env->NewObject(cls, methodID, parent, fae, rae, fre, rre);
jclass sum_class = env->GetObjectClass(sum_obj);

jmethodID add_summary_mid = env->GetMethodID(
Expand Down Expand Up @@ -643,15 +644,16 @@ jobject supla_channelelectricitymetervalue_to_jobject(
memcpy(currency, em_ev->currency, 3);
currency[sizeof(currency) - 1] = 0;

jlong fae_b = em_ev->total_forward_active_energy_balanced;
jlong rae_b = em_ev->total_reverse_active_energy_balanced;

jclass cls =
env->FindClass("org/supla/android/lib/SuplaChannelElectricityMeterValue");
jmethodID methodID =
env->GetMethodID(cls, "<init>", "(IIIILjava/lang/String;JJ)V");
jobject val = env->NewObject(
cls, methodID, em_ev->measured_values, em_ev->period, em_ev->total_cost,
em_ev->price_per_unit, new_string_utf(env, currency),
em_ev->total_forward_active_energy_balanced,
em_ev->total_reverse_active_energy_balanced);
em_ev->price_per_unit, new_string_utf(env, currency), fae_b, rae_b);
jclass cval = env->GetObjectClass(val);

for (a = 0; a < 3; a++) {
Expand All @@ -678,8 +680,11 @@ jobject supla_impulsecountervalue_to_jobject(

ic_ev->custom_unit[sizeof(ic_ev->custom_unit) - 1] = 0;

return env->NewObject(cls, methodID, ic_ev->impulses_per_unit, ic_ev->counter,
ic_ev->calculated_value, ic_ev->total_cost,
jlong counter = ic_ev->counter;
jlong calculated_value = ic_ev->calculated_value;

return env->NewObject(cls, methodID, ic_ev->impulses_per_unit, counter,
calculated_value, ic_ev->total_cost,
ic_ev->price_per_unit, new_string_utf(env, currency),
new_string_utf(env, ic_ev->custom_unit));
}
Expand Down Expand Up @@ -797,10 +802,10 @@ jobject supla_timerstate_to_jobject(TAndroidSuplaClient *asc, JNIEnv *env,
env->SetByteArrayRegion(arr, 0, SUPLA_CHANNELVALUE_SIZE,
(const jbyte *)state->TargetValue);

return env->NewObject(cls, methodID,
(jlong)state->CountdownEndsAt +
supla_client_get_time_diff(asc->_supla_client),
arr, state->SenderID,
jlong countdownEndsAt = (jlong)state->CountdownEndsAt +
supla_client_get_time_diff(asc->_supla_client);

return env->NewObject(cls, methodID, countdownEndsAt, arr, state->SenderID,
new_string_utf(env, state->SenderName));
}

Expand Down Expand Up @@ -1049,10 +1054,13 @@ void supla_cb_scene_state_update(void *_suplaclient, void *user_data,
jclass cls = env->FindClass("org/supla/android/lib/SuplaSceneState");
jmethodID methodID =
env->GetMethodID(cls, "<init>", "(IJJILjava/lang/String;Z)V");

jlong millisFromStart = state->MillisecondsFromStart;
jlong millisLeft = state->MillisecondsLeft;

jobject state_obj = env->NewObject(
cls, methodID, state->SceneId, state->MillisecondsFromStart,
state->MillisecondsLeft, state->InitiatorId,
new_string_utf(env, state->InitiatorName),
cls, methodID, state->SceneId, millisFromStart, millisLeft,
state->InitiatorId, new_string_utf(env, state->InitiatorName),
state->EOL == 1 ? JNI_TRUE : JNI_FALSE);

supla_android_client(asc, asc->j_mid_scene_state_update, state_obj);
Expand Down Expand Up @@ -1273,8 +1281,9 @@ void supla_cb_on_event(void *_suplaclient, void *user_data,
fid = supla_client_GetFieldID(env, cev, "ChannelID", "I");
env->SetIntField(ev, fid, event->ChannelID);

jlong durationMS = event->DurationMS;
fid = supla_client_GetFieldID(env, cev, "DurationMS", "J");
env->SetLongField(ev, fid, event->DurationMS);
env->SetLongField(ev, fid, durationMS);

fid = supla_client_GetFieldID(env, cev, "SenderID", "I");
env->SetIntField(ev, fid, event->SenderID);
Expand All @@ -1300,11 +1309,13 @@ void supla_cb_on_registration_enabled(void *_suplaclient, void *user_data,
jobject re = env->NewObject(cls, methodID);
jclass cre = env->GetObjectClass(re);

jlong clientTimestamp = reg_enabled->client_timestamp;
fid = supla_client_GetFieldID(env, cre, "ClientTimestamp", "J");
env->SetLongField(re, fid, reg_enabled->client_timestamp);
env->SetLongField(re, fid, clientTimestamp);

jlong deviceTimestamp = reg_enabled->iodevice_timestamp;
fid = supla_client_GetFieldID(env, cre, "IODeviceTimestamp", "J");
env->SetLongField(re, fid, reg_enabled->iodevice_timestamp);
env->SetLongField(re, fid, deviceTimestamp);

supla_android_client(asc, asc->j_mid_on_registration_enabled, re);
}
Expand All @@ -1325,8 +1336,9 @@ void supla_cb_on_min_version_required(void *_suplaclient, void *user_data,
jobject mv = env->NewObject(cls, methodID);
jclass cmv = env->GetObjectClass(mv);

jlong callId = call_id;
fid = supla_client_GetFieldID(env, cmv, "CallType", "J");
env->SetLongField(mv, fid, call_id);
env->SetLongField(mv, fid, callId);

fid = supla_client_GetFieldID(env, cmv, "MinVersion", "I");
env->SetIntField(mv, fid, min_version);
Expand Down
21 changes: 16 additions & 5 deletions supla-common/dbcommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ void dbcommon::thread_init(void) { mysql_thread_init(); }
void dbcommon::thread_end(void) { mysql_thread_end(); }

bool dbcommon::connect(int connection_timeout_sec) {
if (is_connected()) {
return true;
}

bool cmsg = false;
struct timeval start_time;
struct timeval tv;
Expand Down Expand Up @@ -79,8 +83,6 @@ bool dbcommon::connect(int connection_timeout_sec) {
supla_log(LOG_ERR, "Failed to connect to database: Error: %s",
mysql_error((MYSQL *)_mysql));
#endif /*__DEBUG*/

disconnect();
} else {
if (mysql_set_character_set((MYSQL *)_mysql, "utf8mb4")) {
supla_log(LOG_ERR,
Expand All @@ -90,9 +92,6 @@ bool dbcommon::connect(int connection_timeout_sec) {

mysql_options((MYSQL *)_mysql, MYSQL_SET_CHARSET_NAME, "utf8mb4");
connected = true;
#ifdef __DEBUG
conn_count++;
#endif /*__DEBUG*/
}
}

Expand All @@ -109,11 +108,23 @@ bool dbcommon::connect(int connection_timeout_sec) {
} while (!connected && connection_timeout_sec > 0 && !st_app_terminate &&
tv.tv_sec - start_time.tv_sec < connection_timeout_sec);

#ifdef __DEBUG
if (connected) {
conn_count++;
}
#endif /*__DEBUG*/

if (!connected) {
supla_log(
LOG_ERR,
"MySQL - Failed to connect to database! Connection timeout %i sec.",
connection_timeout_sec);

if (_mysql != NULL) {
mysql_close((MYSQL *)_mysql);
_mysql = NULL;
}

return false;
}

Expand Down
2 changes: 1 addition & 1 deletion supla-common/dbcommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#ifndef DBCOMMON_H_
#define DBCOMMON_H_

#define DB_VERSION "20221020225729"
#define DB_VERSION "20221124222346"

#include <atomic>

Expand Down
17 changes: 13 additions & 4 deletions supla-common/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/

#include "log.h"

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
Expand All @@ -25,7 +26,7 @@
#include <Windows.h>
#include <wchar.h>
#elif defined(ARDUINO)
void serialPrintLn(const char*);
void serialPrintLn(const char *);
#elif defined(ESP_PLATFORM)
#define LOG_LOCAL_LEVEL ESP_LOG_DEBUG
#include <esp_log.h>
Expand All @@ -37,6 +38,7 @@ static const char *SUPLA_TAG = "SUPLA";
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#endif /*defined(_WIN32)*/

Expand Down Expand Up @@ -233,7 +235,14 @@ void LOG_ICACHE_FLASH supla_vlog(int __pri, const char *message) {
}

gettimeofday(&now, NULL);
printf("[%li.%li] ", (unsigned long)now.tv_sec, (unsigned long)now.tv_usec);
time_t now_time = now.tv_sec;
struct tm now_tm;
localtime_r(&now_time, &now_tm);
char time_buf[64] = {};

strftime(time_buf, sizeof(time_buf), "%H:%M:%S", &now_tm);

printf("[%s.%06ld] ", time_buf, now.tv_usec);
printf("%s", message);
printf("\n");
fflush(stdout);
Expand All @@ -250,7 +259,7 @@ void LOG_ICACHE_FLASH supla_log(int __pri, const char *__fmt, ...) {
int size = 0;

#if defined(ESP8266) || defined(ARDUINO) || defined(_WIN32) || \
defined(SUPLA_DEVICE)
defined(SUPLA_DEVICE)
if (__fmt == NULL) return;
#else
if (__fmt == NULL || (debug_mode == 0 && __pri == LOG_DEBUG)) return;
Expand Down Expand Up @@ -300,7 +309,7 @@ void LOG_ICACHE_FLASH supla_write_state_file(const char *file, int __pri,
}

#if !defined(ESP8266) && !defined(ARDUINO) && !defined(WIN32) && \
!defined(SUPLA_DEVICE)
!defined(SUPLA_DEVICE)

int fd;

Expand Down
13 changes: 8 additions & 5 deletions supla-common/sthread.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,11 @@ void *_sthread_run(void *ptr) {
sthread->params.finish(sthread->params.user_data, ptr);

lck_lock(sthread->lck);
char free_on_finish = sthread->params.free_on_finish;
sthread->finished = 1;
lck_unlock(sthread->lck);

if (sthread->params.free_on_finish) sthread_free(sthread);
if (free_on_finish) sthread_free(sthread);

return 0;
}
Expand Down Expand Up @@ -110,12 +111,14 @@ char sthread_isfinished(void *sthread) {
return result;
}

void sthread_terminate(void *sthread) {
void sthread_terminate(void *sthread, char kill) {
lck_lock(((Tsthread *)sthread)->lck);
((Tsthread *)sthread)->terminated = 1;
lck_unlock(((Tsthread *)sthread)->lck);

pthread_kill(((Tsthread *)sthread)->_thread, SIGINT);
if (kill) {
pthread_kill(((Tsthread *)sthread)->_thread, SIGINT);
}
}

void sthread_free(void *sthread) {
Expand All @@ -124,8 +127,8 @@ void sthread_free(void *sthread) {
free((Tsthread *)sthread);
}

void sthread_twf(void *sthread) {
sthread_terminate(sthread);
void sthread_twf(void *sthread, char kill) {
sthread_terminate(sthread, kill);
sthread_wait(sthread);
sthread_free(sthread);
}
4 changes: 2 additions & 2 deletions supla-common/sthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ void sthread_run(Tsthread_params *sthread_params, void **sthread);
void sthread_wait(void *sthread);
char sthread_isterminated(void *sthread);
char sthread_isfinished(void *sthread);
void sthread_terminate(void *sthread);
void sthread_terminate(void *sthread, char kill);
void sthread_free(void *sthread);
void sthread_twf(void *sthread);
void sthread_twf(void *sthread, char kill);

#ifdef __cplusplus
}
Expand Down
17 changes: 13 additions & 4 deletions supla-common/tools.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,21 @@ void st_signal_handler(int sig) {
void st_critical_signal_handler(int sig) {
#ifndef __ANDROID_API__
void *array[20] = {};
size_t size = 0;
size_t count = 0;

size = backtrace(array, 20);
supla_log(LOG_CRIT,
"Critical Error! Terminate: %i Signal %d:", st_app_terminate,
sig);

count = backtrace(array, 20);
char **symbols = backtrace_symbols(array, count);

for (int i = 0; i < count; i++) {
supla_log(LOG_CRIT, "%s", symbols[i]);
}

free(symbols);

fprintf(stderr, "Critical Error! Signal %d:\n", sig);
backtrace_symbols_fd(array, size, STDERR_FILENO);
exit(1);
#endif /*__ANDROID_API__*/
}
Expand Down
4 changes: 2 additions & 2 deletions supla-scheduler/src/queue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ char queue_loop_s_exec_arr_free(void *s_exec) {
}

char queue_loop_worker_thread_twt(void *worker_sthread) {
sthread_twf(worker_sthread);
sthread_twf(worker_sthread, true);
return 1;
}

Expand Down Expand Up @@ -271,7 +271,7 @@ void queue::loop(void) {

safe_array_lock(workers_thread_arr);
for (a = 0; a < safe_array_count(workers_thread_arr); a++) {
sthread_terminate(safe_array_get(workers_thread_arr, a));
sthread_terminate(safe_array_get(workers_thread_arr, a), true);
}
safe_array_unlock(workers_thread_arr);

Expand Down
2 changes: 1 addition & 1 deletion supla-scheduler/src/supla-scheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) {
// RELEASE BLOCK
supla_log(LOG_INFO, "Shutting down...");

sthread_twf(queue_loop_t);
sthread_twf(queue_loop_t, true);

st_mainloop_free();
st_delpidfile(pidfile_path);
Expand Down

0 comments on commit 7939dce

Please sign in to comment.