targets/Win32/plc_Win32_main.c
author Edouard Tisserant
Wed, 24 Jan 2018 16:12:49 +0100
changeset 1907 9d17b9d91697
parent 1903 084256be3658
child 2174 55611282b909
permissions -rw-r--r--
fixed erro introduced 2 commits ago (-e) : tuples have no reverse() method
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
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    57
/* Variable used to stop plcloop thread */
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    58
void PlcLoop()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    59
{
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    60
    while(WaitForSingleObject(PLC_timer, INFINITE) == WAIT_OBJECT_0)
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    61
    {
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    62
        PLC_timer_notify();
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    63
    }
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    64
}
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    65
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    66
HANDLE PLC_thread;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    67
HANDLE debug_sem;
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    68
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
    69
HANDLE python_sem;
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    70
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
    71
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    72
#define maxval(a,b) ((a>b)?a:b)
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    73
int startPLC(int argc,char **argv)
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    74
{
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
    75
	unsigned long thread_id = 0;
954
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    76
    BOOL tmp;
568
20a223828a06 Moved locales out of platform agnostic C template
edouard
parents: 521
diff changeset
    77
    setlocale(LC_NUMERIC, "C");
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
    78
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    79
    debug_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    80
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    81
                            1,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    82
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    83
                            NULL);          // unnamed semaphore
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    84
    if (debug_sem == NULL)
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    85
    {
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    86
        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
    87
        return 1;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    88
    }
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    89
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    90
    debug_wait_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    91
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    92
                            0,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    93
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    94
                            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
    95
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    96
    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
    97
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    98
        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
    99
        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
   100
    }
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   101
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   102
    python_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   103
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   104
                            1,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   105
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   106
                            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
   107
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   108
    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
   109
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   110
        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
   111
        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
   112
    }
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   113
    python_wait_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   114
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   115
                            0,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   116
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   117
                            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
   118
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   119
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   120
    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
   121
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   122
        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
   123
        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
   124
    }
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   125
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   126
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   127
    /* Create a waitable timer */
685
2db8b87016a0 Fixed Win32 timer up to 1ms
Edouard Tisserant
parents: 681
diff changeset
   128
    timeBeginPeriod(1);
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   129
    PLC_timer = CreateWaitableTimer(NULL, FALSE, "WaitableTimer");
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   130
    if(NULL == PLC_timer)
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   131
    {
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   132
        printf("CreateWaitableTimer failed (%d)\n", GetLastError());
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   133
        return 1;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   134
    }
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   135
    if( __init(argc,argv) == 0 )
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   136
    {
1428
e14003eb4d42 Simplified use of runtime's global variable __common_ticktime accross extensions.
Edouard Tisserant
parents: 985
diff changeset
   137
        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
   138
        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
   139
    }
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   140
    else{
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   141
        return 1;
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   142
    }
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   143
    return 0;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   144
}
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
   145
static unsigned long __debug_tick;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   146
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   147
int TryEnterDebugSection(void)
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   148
{
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   149
	//printf("TryEnterDebugSection\n");
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   150
    if(WaitForSingleObject(debug_sem, 0) == WAIT_OBJECT_0){
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   151
        /* Only enter if debug active */
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   152
        if(__DEBUG){
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   153
            return 1;
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   154
        }
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   155
        ReleaseSemaphore(debug_sem, 1, NULL);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   156
    }
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   157
    return 0;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   158
}
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   159
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   160
void LeaveDebugSection(void)
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   161
{
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   162
	ReleaseSemaphore(debug_sem, 1, NULL);
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   163
    //printf("LeaveDebugSection\n");
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   164
}
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   165
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   166
int stopPLC()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   167
{
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   168
    CloseHandle(PLC_timer);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   169
    WaitForSingleObject(PLC_thread, INFINITE);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   170
    __cleanup();
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   171
    CloseHandle(debug_wait_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   172
    CloseHandle(debug_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   173
    CloseHandle(python_wait_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   174
    CloseHandle(python_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   175
    CloseHandle(PLC_thread);
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   176
}
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   177
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   178
/* from plc_debugger.c */
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   179
int WaitDebugData(unsigned long *tick)
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   180
{
709
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   181
	DWORD res;
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   182
	res = WaitForSingleObject(debug_wait_sem, INFINITE);
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   183
    *tick = __debug_tick;
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   184
    /* Wait signal from PLC thread */
709
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   185
	return res != WAIT_OBJECT_0;
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   186
}
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   187
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   188
/* Called by PLC thread when debug_publish finished
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   189
 * This is supposed to unlock debugger thread in WaitDebugData*/
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   190
void InitiateDebugTransfer()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   191
{
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   192
    /* remember tick */
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   193
    __debug_tick = __tick;
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   194
    /* 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
   195
    ReleaseSemaphore(debug_wait_sem, 1, NULL);
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   196
}
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   197
614
eed1dcf311a1 added return type to suspendDebug
Edouard Tisserant
parents: 580
diff changeset
   198
int suspendDebug(int disable)
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   199
{
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   200
    /* 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
   201
    WaitForSingleObject(debug_sem, INFINITE);
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   202
    __DEBUG = !disable;
484
3d0c06e2648c Fixed freeze on debug suspend.
Lolitech
parents: 483
diff changeset
   203
    if(disable)
3d0c06e2648c Fixed freeze on debug suspend.
Lolitech
parents: 483
diff changeset
   204
        ReleaseSemaphore(debug_sem, 1, NULL);
614
eed1dcf311a1 added return type to suspendDebug
Edouard Tisserant
parents: 580
diff changeset
   205
    return 0;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   206
}
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   207
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   208
void resumeDebug()
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   209
{
290
3bd617ae7a05 Local Runtime (LOCAL://) now launched "on demand"
etisserant
parents: 280
diff changeset
   210
	__DEBUG = 1;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   211
    /* Let PLC enter debug code */
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   212
	ReleaseSemaphore(debug_sem, 1, NULL);
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   213
}
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   214
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   215
/* 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
   216
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
   217
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   218
    /* Wait signal from PLC thread */
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   219
	return WaitForSingleObject(python_wait_sem, INFINITE);
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   220
}
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
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
/* 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
   223
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
   224
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   225
    /* 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
   226
	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
   227
}
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   228
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   229
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
   230
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   231
	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
   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
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   234
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
   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
	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
   237
}
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
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
   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
	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
   242
}
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   243
1903
084256be3658 Main runtime template C code : Added HAVE_RETAIN preprocessor definition for customized build to signal it provides IEC-61131 Retain memory handling function. Removed targets/Xenomai/plc_Xenomai_noretain.c, now useless.
Edouard Tisserant
parents: 1573
diff changeset
   244
#ifndef HAVE_RETAIN
1457
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   245
void InitRetain(void)
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   246
{
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   247
}
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   248
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   249
void CleanupRetain(void)
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   250
{
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   251
}
ff7cfce737ca Added PLCID variable accessible from C side, set with binarie's MD5. Added retain init and cleanup calls. Extended tests/python to test PLCID
Edouard Tisserant
parents: 1428
diff changeset
   252
521
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   253
int CheckRetainBuffer(void)
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   254
{
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   255
	return 1;
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   256
}
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   257
580
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   258
void ValidateRetainBuffer(void)
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   259
{
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   260
}
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   261
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   262
void InValidateRetainBuffer(void)
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   263
{
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   264
}
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   265
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   266
void Retain(unsigned int offset, unsigned int count, void * p)
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   267
{
681
383864958dac commented out noisy printf in Win32 target
Edouard Tisserant
parents: 614
diff changeset
   268
    /*
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   269
    unsigned int position;
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   270
    for(position=0; position<count; position++ ){
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   271
        printf("%d : 0x%2.2x\n", offset+position, ((char*)p)[position]);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   272
    }
681
383864958dac commented out noisy printf in Win32 target
Edouard Tisserant
parents: 614
diff changeset
   273
    */
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   274
}
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   275
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   276
void Remind(unsigned int offset, unsigned int count, void *p)
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   277
{
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   278
}
1903
084256be3658 Main runtime template C code : Added HAVE_RETAIN preprocessor definition for customized build to signal it provides IEC-61131 Retain memory handling function. Removed targets/Xenomai/plc_Xenomai_noretain.c, now useless.
Edouard Tisserant
parents: 1573
diff changeset
   279
#endif // !HAVE_RETAIN
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   280
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
   281
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
   282
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
   283
{
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
   284
    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
   285
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
   286
}
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
   287
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
   288
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
   289
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
   290
{
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
   291
    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
   292
}
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
   293