targets/Win32/plc_Win32_main.c
author Edouard Tisserant
Fri, 19 Jun 2020 11:07:25 +0200
branchsvghmi
changeset 2986 12cd06391185
parent 2174 55611282b909
child 3295 0375d801fff7
permissions -rw-r--r--
Runtime: Fix typo in PLCObject leading to exception when reporting failure.
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
     1
/**
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
     2
 * Win32 specific code
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
     3
 **/
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
     4
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
     5
#include <stdio.h>
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
     6
#include <sys/timeb.h>
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
     7
#include <time.h>
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
     8
#include <windows.h>
568
20a223828a06 Moved locales out of platform agnostic C template
edouard
parents: 521
diff changeset
     9
#include <locale.h>
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    10
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    11
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    12
long AtomicCompareExchange(long* atomicvar, long compared, long exchange)
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    13
{
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    14
    return InterlockedCompareExchange(atomicvar, exchange, compared);
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    15
}
954
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    16
CRITICAL_SECTION Atomic64CS; 
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    17
long long AtomicCompareExchange64(long long* atomicvar, long long compared, long long exchange)
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    18
{
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    19
    long long res;
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    20
    EnterCriticalSection(&Atomic64CS);
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    21
    res=*atomicvar;
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    22
    if(*atomicvar == compared){
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    23
        *atomicvar = exchange;
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    24
    }
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    25
    LeaveCriticalSection(&Atomic64CS);
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    26
    return res;
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    27
}
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    28
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    29
struct _timeb timetmp;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    30
void PLC_GetTime(IEC_TIME *CURRENT_TIME)
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    31
{
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    32
	_ftime(&timetmp);
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    33
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    34
	(*CURRENT_TIME).tv_sec = timetmp.time;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    35
	(*CURRENT_TIME).tv_nsec = timetmp.millitm * 1000000;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    36
}
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    37
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    38
void PLC_timer_notify()
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    39
{
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    40
    PLC_GetTime(&__CURRENT_TIME);
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    41
    __run();
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    42
}
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    43
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    44
HANDLE PLC_timer = NULL;
518
8e61b0066859 Fixed confusion about __common_ticktime type, redesigned LPC PLC timer support
edouard
parents: 484
diff changeset
    45
void PLC_SetTimer(unsigned long long next, unsigned long long period)
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    46
{
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    47
	LARGE_INTEGER liDueTime;
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    48
	/* arg 2 of SetWaitableTimer take 100 ns interval*/
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    49
	liDueTime.QuadPart =  next / (-100);
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    50
685
2db8b87016a0 Fixed Win32 timer up to 1ms
Edouard Tisserant
parents: 681
diff changeset
    51
	if (!SetWaitableTimer(PLC_timer, &liDueTime, period<1000000?1:period/1000000, NULL, NULL, 0))
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    52
    {
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    53
        printf("SetWaitableTimer failed (%d)\n", GetLastError());
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    54
    }
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    55
}
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    56
2174
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    57
int PLC_shutdown;
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    58
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    59
int ForceSaveRetainReq(void) {
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    60
    return PLC_shutdown;
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    61
}
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    62
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    63
/* Variable used to stop plcloop thread */
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    64
void PlcLoop()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    65
{
2174
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    66
    PLC_shutdown = 0;
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    67
    while(!PLC_shutdown) {
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    68
        if (WaitForSingleObject(PLC_timer, INFINITE) != WAIT_OBJECT_0)
55611282b909 Use the same retain implementation for Win32 targets
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1903
diff changeset
    69
            PLC_shutdown = 1;
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    70
        PLC_timer_notify();
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    71
    }
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    72
}
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    73
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    74
HANDLE PLC_thread;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    75
HANDLE debug_sem;
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    76
HANDLE debug_wait_sem;
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    77
HANDLE python_sem;
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    78
HANDLE python_wait_sem;
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    79
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    80
#define maxval(a,b) ((a>b)?a:b)
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    81
int startPLC(int argc,char **argv)
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    82
{
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    83
	unsigned long thread_id = 0;
954
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    84
    BOOL tmp;
568
20a223828a06 Moved locales out of platform agnostic C template
edouard
parents: 521
diff changeset
    85
    setlocale(LC_NUMERIC, "C");
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    86
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    87
    debug_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    88
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    89
                            1,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    90
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    91
                            NULL);          // unnamed semaphore
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    92
    if (debug_sem == NULL)
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    93
    {
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    94
        printf("startPLC CreateSemaphore debug_sem error: %d\n", GetLastError());
1573
6dbc61e3dd65 fix warning: 'return' with no value in function startPLC
ctbenergy <ewald.weinahndl@gmail.com>
parents: 1466
diff changeset
    95
        return 1;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    96
    }
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    97
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    98
    debug_wait_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    99
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   100
                            0,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   101
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   102
                            NULL);          // unnamed semaphore
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   103
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   104
    if (debug_wait_sem == NULL)
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   105
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   106
        printf("startPLC CreateSemaphore debug_wait_sem error: %d\n", GetLastError());
1573
6dbc61e3dd65 fix warning: 'return' with no value in function startPLC
ctbenergy <ewald.weinahndl@gmail.com>
parents: 1466
diff changeset
   107
        return 1;
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   108
    }
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   109
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   110
    python_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   111
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   112
                            1,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   113
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   114
                            NULL);          // unnamed semaphore
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   115
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   116
    if (python_sem == NULL)
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   117
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   118
        printf("startPLC CreateSemaphore python_sem error: %d\n", GetLastError());
1573
6dbc61e3dd65 fix warning: 'return' with no value in function startPLC
ctbenergy <ewald.weinahndl@gmail.com>
parents: 1466
diff changeset
   119
        return 1;
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   120
    }
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   121
    python_wait_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   122
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   123
                            0,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   124
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   125
                            NULL);          // unnamed semaphore
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   126
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   127
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   128
    if (python_wait_sem == NULL)
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   129
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   130
        printf("startPLC CreateSemaphore python_wait_sem error: %d\n", GetLastError());
1573
6dbc61e3dd65 fix warning: 'return' with no value in function startPLC
ctbenergy <ewald.weinahndl@gmail.com>
parents: 1466
diff changeset
   131
        return 1;
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   132
    }
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   133
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   134
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   135
    /* Create a waitable timer */
685
2db8b87016a0 Fixed Win32 timer up to 1ms
Edouard Tisserant
parents: 681
diff changeset
   136
    timeBeginPeriod(1);
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   137
    PLC_timer = CreateWaitableTimer(NULL, FALSE, "WaitableTimer");
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   138
    if(NULL == PLC_timer)
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   139
    {
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   140
        printf("CreateWaitableTimer failed (%d)\n", GetLastError());
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   141
        return 1;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   142
    }
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   143
    if( __init(argc,argv) == 0 )
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   144
    {
1428
e14003eb4d42 Simplified use of runtime's global variable __common_ticktime accross extensions.
Edouard Tisserant
parents: 985
diff changeset
   145
        PLC_SetTimer(common_ticktime__,common_ticktime__);
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   146
        PLC_thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PlcLoop, NULL, 0, &thread_id);
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   147
    }
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   148
    else{
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   149
        return 1;
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   150
    }
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   151
    return 0;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   152
}
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 329
diff changeset
   153
static unsigned long __debug_tick;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   154
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   155
int TryEnterDebugSection(void)
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   156
{
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   157
	//printf("TryEnterDebugSection\n");
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   158
    if(WaitForSingleObject(debug_sem, 0) == WAIT_OBJECT_0){
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   159
        /* Only enter if debug active */
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   160
        if(__DEBUG){
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   161
            return 1;
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   162
        }
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   163
        ReleaseSemaphore(debug_sem, 1, NULL);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   164
    }
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   165
    return 0;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   166
}
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   167
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   168
void LeaveDebugSection(void)
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   169
{
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   170
	ReleaseSemaphore(debug_sem, 1, NULL);
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   171
    //printf("LeaveDebugSection\n");
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   172
}
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   173
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   174
int stopPLC()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   175
{
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   176
    CloseHandle(PLC_timer);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   177
    WaitForSingleObject(PLC_thread, INFINITE);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   178
    __cleanup();
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   179
    CloseHandle(debug_wait_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   180
    CloseHandle(debug_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   181
    CloseHandle(python_wait_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   182
    CloseHandle(python_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   183
    CloseHandle(PLC_thread);
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   184
}
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   185
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   186
/* from plc_debugger.c */
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   187
int WaitDebugData(unsigned long *tick)
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   188
{
709
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   189
	DWORD res;
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   190
	res = WaitForSingleObject(debug_wait_sem, INFINITE);
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   191
    *tick = __debug_tick;
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   192
    /* Wait signal from PLC thread */
709
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   193
	return res != WAIT_OBJECT_0;
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   194
}
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   195
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   196
/* Called by PLC thread when debug_publish finished
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   197
 * This is supposed to unlock debugger thread in WaitDebugData*/
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   198
void InitiateDebugTransfer()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   199
{
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   200
    /* remember tick */
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   201
    __debug_tick = __tick;
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   202
    /* signal debugger thread it can read data */
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   203
    ReleaseSemaphore(debug_wait_sem, 1, NULL);
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   204
}
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   205
614
eed1dcf311a1 added return type to suspendDebug
Edouard Tisserant
parents: 580
diff changeset
   206
int suspendDebug(int disable)
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   207
{
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   208
    /* Prevent PLC to enter debug code */
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   209
    WaitForSingleObject(debug_sem, INFINITE);
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   210
    __DEBUG = !disable;
484
3d0c06e2648c Fixed freeze on debug suspend.
Lolitech
parents: 483
diff changeset
   211
    if(disable)
3d0c06e2648c Fixed freeze on debug suspend.
Lolitech
parents: 483
diff changeset
   212
        ReleaseSemaphore(debug_sem, 1, NULL);
614
eed1dcf311a1 added return type to suspendDebug
Edouard Tisserant
parents: 580
diff changeset
   213
    return 0;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   214
}
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   215
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   216
void resumeDebug()
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   217
{
290
3bd617ae7a05 Local Runtime (LOCAL://) now launched "on demand"
etisserant
parents: 280
diff changeset
   218
	__DEBUG = 1;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   219
    /* Let PLC enter debug code */
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   220
	ReleaseSemaphore(debug_sem, 1, NULL);
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   221
}
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   222
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   223
/* from plc_python.c */
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   224
int WaitPythonCommands(void)
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   225
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   226
    /* Wait signal from PLC thread */
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   227
	return WaitForSingleObject(python_wait_sem, INFINITE);
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   228
}
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   229
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   230
/* Called by PLC thread on each new python command*/
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   231
void UnBlockPythonCommands(void)
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   232
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   233
    /* signal debugger thread it can read data */
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   234
	ReleaseSemaphore(python_wait_sem, 1, NULL);
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   235
}
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   236
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   237
int TryLockPython(void)
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   238
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   239
	return WaitForSingleObject(python_sem, 0) == WAIT_OBJECT_0;
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   240
}
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   241
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   242
void UnLockPython(void)
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   243
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   244
	ReleaseSemaphore(python_sem, 1, NULL);
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   245
}
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   246
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   247
void LockPython(void)
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   248
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   249
	WaitForSingleObject(python_sem, INFINITE);
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   250
}
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   251
1465
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   252
static void __attribute__((constructor))
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   253
beremiz_dll_init(void)
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   254
{
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   255
    InitializeCriticalSection(&Atomic64CS);
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   256
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   257
}
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   258
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   259
static void __attribute__((destructor))
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   260
beremiz_dll_destroy(void)
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   261
{
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   262
    DeleteCriticalSection(&Atomic64CS);
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   263
}
9011e2ceea85 Fixed win32 runtime crashing when attempting to log before errors before PLC start. Added pictures to wxHMI and fixed it so that it loads on windows as well
Edouard Tisserant
parents: 1457
diff changeset
   264