targets/Win32/plc_Win32_main.c
author Edouard Tisserant
Fri, 20 Jun 2014 21:36:23 +0200
changeset 1420 71b1545d746f
parent 985 cd8dadcef426
child 1428 e14003eb4d42
permissions -rw-r--r--
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
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
954
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    79
    InitializeCriticalSection(&Atomic64CS);
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
    80
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    81
    debug_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    82
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    83
                            1,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    84
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    85
                            NULL);          // unnamed semaphore
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    86
    if (debug_sem == NULL)
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    87
    {
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
    88
        printf("startPLC CreateSemaphore debug_sem error: %d\n", GetLastError());
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    89
        return;
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
    90
    }
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    91
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    92
    debug_wait_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    93
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    94
                            0,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    95
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
    96
                            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
    97
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
    98
    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
    99
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   100
        printf("startPLC CreateSemaphore debug_wait_sem error: %d\n", GetLastError());
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   101
        return;
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   102
    }
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   103
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   104
    python_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   105
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   106
                            1,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   107
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   108
                            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
   109
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   110
    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
   111
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   112
        printf("startPLC CreateSemaphore python_sem error: %d\n", GetLastError());
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   113
        return;
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   114
    }
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   115
    python_wait_sem = CreateSemaphore(
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   116
                            NULL,           // default security attributes
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   117
                            0,  			// initial count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   118
                            1,  			// maximum count
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   119
                            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
   120
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   121
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   122
    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
   123
    {
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   124
        printf("startPLC CreateSemaphore python_wait_sem error: %d\n", GetLastError());
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   125
        return;
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
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   129
    /* Create a waitable timer */
685
2db8b87016a0 Fixed Win32 timer up to 1ms
Edouard Tisserant
parents: 681
diff changeset
   130
    timeBeginPeriod(1);
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   131
    PLC_timer = CreateWaitableTimer(NULL, FALSE, "WaitableTimer");
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   132
    if(NULL == PLC_timer)
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   133
    {
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   134
        printf("CreateWaitableTimer failed (%d)\n", GetLastError());
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   135
        return 1;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   136
    }
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   137
    if( __init(argc,argv) == 0 )
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   138
    {
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   139
        PLC_SetTimer(Ttick,Ttick);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   140
        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
   141
    }
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   142
    else{
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   143
        return 1;
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   144
    }
205
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   145
    return 0;
ee8d1f4528ef move specific target runtimes to their targets directory
greg
parents:
diff changeset
   146
}
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
   147
static unsigned long __debug_tick;
244
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
int TryEnterDebugSection(void)
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   150
{
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   151
	//printf("TryEnterDebugSection\n");
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   152
    if(WaitForSingleObject(debug_sem, 0) == WAIT_OBJECT_0){
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   153
        /* Only enter if debug active */
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   154
        if(__DEBUG){
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   155
            return 1;
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   156
        }
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   157
        ReleaseSemaphore(debug_sem, 1, NULL);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   158
    }
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   159
    return 0;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   160
}
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
void LeaveDebugSection(void)
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   163
{
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   164
	ReleaseSemaphore(debug_sem, 1, NULL);
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   165
    //printf("LeaveDebugSection\n");
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   166
}
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   167
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   168
int stopPLC()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   169
{
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   170
    CloseHandle(PLC_timer);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   171
    WaitForSingleObject(PLC_thread, INFINITE);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   172
    __cleanup();
954
ab487d32ce9a Made logging compatible with windows API
Edouard Tisserant
parents: 709
diff changeset
   173
    DeleteCriticalSection(&Atomic64CS);
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   174
    CloseHandle(debug_wait_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   175
    CloseHandle(debug_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   176
    CloseHandle(python_wait_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   177
    CloseHandle(python_sem);
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   178
    CloseHandle(PLC_thread);
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   179
}
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   180
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   181
/* from plc_debugger.c */
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   182
int WaitDebugData(unsigned long *tick)
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   183
{
709
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   184
	DWORD res;
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   185
	res = WaitForSingleObject(debug_wait_sem, INFINITE);
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   186
    *tick = __debug_tick;
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   187
    /* Wait signal from PLC thread */
709
fe65601bd983 Fixing bug in debugger sending wrong tick with values
laurent
parents: 685
diff changeset
   188
	return res != WAIT_OBJECT_0;
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   189
}
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   190
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   191
/* Called by PLC thread when debug_publish finished
229
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   192
 * This is supposed to unlock debugger thread in WaitDebugData*/
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   193
void InitiateDebugTransfer()
8bc65076e290 add tests for win32
greg
parents: 205
diff changeset
   194
{
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   195
    /* remember tick */
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   196
    __debug_tick = __tick;
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   197
    /* 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
   198
    ReleaseSemaphore(debug_wait_sem, 1, NULL);
229
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
614
eed1dcf311a1 added return type to suspendDebug
Edouard Tisserant
parents: 580
diff changeset
   201
int suspendDebug(int disable)
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   202
{
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   203
    /* 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
   204
    WaitForSingleObject(debug_sem, INFINITE);
469
a6a9b59636d8 Propagated new runtime changes to win32 target
edouard
parents: 446
diff changeset
   205
    __DEBUG = !disable;
484
3d0c06e2648c Fixed freeze on debug suspend.
Lolitech
parents: 483
diff changeset
   206
    if(disable)
3d0c06e2648c Fixed freeze on debug suspend.
Lolitech
parents: 483
diff changeset
   207
        ReleaseSemaphore(debug_sem, 1, NULL);
614
eed1dcf311a1 added return type to suspendDebug
Edouard Tisserant
parents: 580
diff changeset
   208
    return 0;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   209
}
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   210
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   211
void resumeDebug()
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   212
{
290
3bd617ae7a05 Local Runtime (LOCAL://) now launched "on demand"
etisserant
parents: 280
diff changeset
   213
	__DEBUG = 1;
244
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   214
    /* Let PLC enter debug code */
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   215
	ReleaseSemaphore(debug_sem, 1, NULL);
85e92d9e34a8 fixed : bug in debugthreadproc (plugger.py)
greg
parents: 229
diff changeset
   216
}
280
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
/* 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
   219
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
   220
{
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   221
    /* Wait signal from PLC thread */
329
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   222
	return WaitForSingleObject(python_wait_sem, INFINITE);
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   223
}
22e65b8e20f4 add autostart plc feature for beremiz_service
greg
parents: 290
diff changeset
   224
280
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   225
/* 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
   226
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
   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
    /* 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
   229
	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
   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
f2ef79f3dba0 Added native (not a plugin) asynchronous python eval function block - Beta. Code cleanup in C code templates.
etisserant
parents: 276
diff changeset
   232
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
   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
	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
   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
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
   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
	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
   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 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
   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
	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
   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
521
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   247
int CheckRetainBuffer(void)
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   248
{
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   249
	return 1;
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   250
}
02cb9e5fb6f6 LPC transfer tested, added PLCInfo along MD5 checksum while invoking makefile
edouard
parents: 518
diff changeset
   251
580
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   252
void ValidateRetainBuffer(void)
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   253
{
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   254
}
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   255
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   256
void InValidateRetainBuffer(void)
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   257
{
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   258
}
9dd978e6537c More robust retain buffer validity management
edouard
parents: 568
diff changeset
   259
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   260
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
   261
{
681
383864958dac commented out noisy printf in Win32 target
Edouard Tisserant
parents: 614
diff changeset
   262
    /*
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   263
    unsigned int position;
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   264
    for(position=0; position<count; position++ ){
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   265
        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
   266
    }
681
383864958dac commented out noisy printf in Win32 target
Edouard Tisserant
parents: 614
diff changeset
   267
    */
483
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   268
}
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   269
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   270
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
   271
{
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   272
}
bc26c42d2eec fixed greg's crap in win32, enhanced debug stability, implemented preliminary retain
edouard
parents: 469
diff changeset
   273