targets/Xenomai/plc_Xenomai_main.c
author laurent
Thu, 16 Feb 2012 22:54:44 +0100
changeset 692 8b1ed486f374
parent 617 7c23fac40a2a
child 695 f378fe028f6c
permissions -rw-r--r--
Adding support for not closing debug tabs and remove variable in variable debug panel if instance still exist in newly transfered program
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
     1
/**
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
     2
 * Linux specific code
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
     3
 **/
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
     4
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
     5
#include <stdio.h>
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
     6
#include <unistd.h>
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
     7
#include <string.h>
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
     8
#include <time.h>
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
     9
#include <signal.h>
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    10
#include <stdlib.h>
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    11
#include <sys/mman.h>
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
    12
#include <sys/fcntl.h>
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    13
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    14
#include <native/task.h>
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    15
#include <native/timer.h>
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    16
#include <native/mutex.h>
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    17
#include <native/sem.h>
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
    18
#include <native/pipe.h>
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    19
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    20
unsigned int PLC_state = 0;
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    21
#define PLC_STATE_TASK_CREATED                 1
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    22
#define PLC_STATE_DEBUG_FILE_OPENED            2 
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    23
#define PLC_STATE_DEBUG_PIPE_CREATED           4 
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    24
#define PLC_STATE_PYTHON_FILE_OPENED           8 
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    25
#define PLC_STATE_PYTHON_PIPE_CREATED          16   
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    26
#define PLC_STATE_WAITDEBUG_FILE_OPENED        32   
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    27
#define PLC_STATE_WAITDEBUG_PIPE_CREATED       64
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    28
#define PLC_STATE_WAITPYTHON_FILE_OPENED       128
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    29
#define PLC_STATE_WAITPYTHON_PIPE_CREATED      256
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    30
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    31
#define WAITDEBUG_PIPE_DEVICE        "/dev/rtp0"
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    32
#define WAITDEBUG_PIPE_MINOR         0
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    33
#define DEBUG_PIPE_DEVICE            "/dev/rtp1"
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    34
#define DEBUG_PIPE_MINOR             1
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    35
#define WAITPYTHON_PIPE_DEVICE       "/dev/rtp2"
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    36
#define WAITPYTHON_PIPE_MINOR        2
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    37
#define PYTHON_PIPE_DEVICE           "/dev/rtp3"
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    38
#define PYTHON_PIPE_MINOR            3
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    39
#define PIPE_SIZE                    1 
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    40
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    41
/* provided by POUS.C */
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 345
diff changeset
    42
extern unsigned long common_ticktime__;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    43
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    44
long AtomicCompareExchange(long* atomicvar,long compared, long exchange)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    45
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    46
    return __sync_val_compare_and_swap(atomicvar, compared, exchange);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    47
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    48
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    49
void PLC_GetTime(IEC_TIME *CURRENT_TIME)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    50
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    51
    RTIME current_time = rt_timer_read();
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    52
    CURRENT_TIME->tv_sec = current_time / 1000000000;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    53
    CURRENT_TIME->tv_nsec = current_time % 1000000000;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    54
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    55
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    56
RT_TASK PLC_task;
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
    57
RT_PIPE WaitDebug_pipe;
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    58
RT_PIPE WaitPython_pipe;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    59
RT_PIPE Debug_pipe;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    60
RT_PIPE Python_pipe;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    61
int WaitDebug_pipe_fd;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    62
int WaitPython_pipe_fd;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    63
int Debug_pipe_fd;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    64
int Python_pipe_fd;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    65
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    66
int PLC_shutdown = 0;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    67
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    68
void PLC_SetTimer(unsigned long long next, unsigned long long period)
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    69
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    70
  RTIME current_time = rt_timer_read();
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    71
  rt_task_set_periodic(&PLC_task, current_time + next, rt_timer_ns2ticks(period));
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    72
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    73
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    74
void PLC_task_proc(void *arg)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    75
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    76
    PLC_SetTimer(Ttick, Ttick);
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
    77
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    78
    while (1) {
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    79
        PLC_GetTime(&__CURRENT_TIME);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    80
        __run();
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    81
        if (PLC_shutdown) break;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    82
        rt_task_wait_period(NULL);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    83
    }
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    84
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    85
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 345
diff changeset
    86
static unsigned long __debug_tick;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    87
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    88
void PLC_cleanup_all(void)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    89
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    90
    if (PLC_state & PLC_STATE_TASK_CREATED) {
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    91
        rt_task_delete(&PLC_task);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    92
        PLC_state &= ~PLC_STATE_TASK_CREATED;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    93
    }
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
    94
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    95
    if (PLC_state & PLC_STATE_WAITDEBUG_PIPE_CREATED) {
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    96
        rt_pipe_delete(&WaitDebug_pipe);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    97
        PLC_state &= ~PLC_STATE_WAITDEBUG_PIPE_CREATED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    98
    }
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
    99
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   100
    if (PLC_state & PLC_STATE_WAITDEBUG_FILE_OPENED) {
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   101
        close(WaitDebug_pipe_fd);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   102
        PLC_state &= ~PLC_STATE_WAITDEBUG_FILE_OPENED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   103
    }
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   104
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   105
    if (PLC_state & PLC_STATE_WAITPYTHON_PIPE_CREATED) {
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   106
        rt_pipe_delete(&WaitPython_pipe);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   107
        PLC_state &= ~PLC_STATE_WAITDEBUG_PIPE_CREATED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   108
    }
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   109
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   110
    if (PLC_state & PLC_STATE_WAITPYTHON_PIPE_CREATED) {
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   111
        close(WaitPython_pipe_fd);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   112
        PLC_state &= ~PLC_STATE_WAITPYTHON_FILE_OPENED;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   113
    }
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   114
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   115
    if (PLC_state & PLC_STATE_DEBUG_PIPE_CREATED) {
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   116
        rt_pipe_delete(&Debug_pipe);
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   117
        PLC_state &= ~PLC_STATE_DEBUG_PIPE_CREATED;
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   118
    }
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   119
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   120
    if (PLC_state & PLC_STATE_DEBUG_FILE_OPENED) {
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   121
        close(Debug_pipe_fd);
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   122
        PLC_state &= ~PLC_STATE_DEBUG_FILE_OPENED;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   123
    }
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   124
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   125
    if (PLC_state & PLC_STATE_PYTHON_PIPE_CREATED) {
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   126
        rt_pipe_delete(&Python_pipe);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   127
        PLC_state &= ~PLC_STATE_DEBUG_PIPE_CREATED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   128
    }
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   129
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   130
    if (PLC_state & PLC_STATE_PYTHON_PIPE_CREATED) {
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   131
        close(Python_pipe_fd);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   132
        PLC_state &= ~PLC_STATE_PYTHON_FILE_OPENED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   133
    }
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   134
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   135
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   136
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   137
int stopPLC()
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   138
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   139
    PLC_shutdown = 1;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   140
    /* Stop the PLC */
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   141
    PLC_SetTimer(0, 0);
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   142
    __cleanup();
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   143
    PLC_cleanup_all();
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   144
    __debug_tick = -1;
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   145
    return 0;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   146
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   147
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   148
//
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   149
void catch_signal(int sig)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   150
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   151
    stopPLC();
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   152
//  signal(SIGTERM, catch_signal);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   153
    signal(SIGINT, catch_signal);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   154
    printf("Got Signal %d\n",sig);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   155
    exit(0);
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   156
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   157
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   158
#define max_val(a,b) ((a>b)?a:b)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   159
int startPLC(int argc,char **argv)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   160
{
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   161
    signal(SIGINT, catch_signal);
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   162
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   163
    /* no memory swapping for that process */
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   164
    mlockall(MCL_CURRENT | MCL_FUTURE);
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   165
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 345
diff changeset
   166
    /* Define Ttick to 1ms if common_ticktime not defined */
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 345
diff changeset
   167
    Ttick = common_ticktime__?common_ticktime__:1000000;
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   168
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   169
    /*** RT Pipes creation and opening ***/
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   170
    /* create Debug_pipe */
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   171
    if(rt_pipe_create(&Debug_pipe, "Debug_pipe", DEBUG_PIPE_MINOR, PIPE_SIZE)) 
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   172
        goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   173
    PLC_state |= PLC_STATE_DEBUG_PIPE_CREATED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   174
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   175
    /* open Debug_pipe*/
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   176
    if((Debug_pipe_fd = open(DEBUG_PIPE_DEVICE, O_RDWR)) == -1) goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   177
    PLC_state |= PLC_STATE_DEBUG_FILE_OPENED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   178
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   179
    /* create Python_pipe */
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   180
    if(rt_pipe_create(&Python_pipe, "Python_pipe", PYTHON_PIPE_MINOR, PIPE_SIZE)) 
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   181
        goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   182
    PLC_state |= PLC_STATE_PYTHON_PIPE_CREATED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   183
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   184
    /* open Python_pipe*/
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   185
    if((Python_pipe_fd = open(PYTHON_PIPE_DEVICE, O_RDWR)) == -1) goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   186
    PLC_state |= PLC_STATE_PYTHON_FILE_OPENED;
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   187
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   188
    /* create WaitDebug_pipe */
616
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   189
    if(rt_pipe_create(&WaitDebug_pipe, "WaitDebug_pipe", WAITDEBUG_PIPE_MINOR, PIPE_SIZE))
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   190
        goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   191
    PLC_state |= PLC_STATE_WAITDEBUG_PIPE_CREATED;
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   192
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   193
    /* open WaitDebug_pipe*/
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   194
    if((WaitDebug_pipe_fd = open(WAITDEBUG_PIPE_DEVICE, O_RDWR)) == -1) goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   195
    PLC_state |= PLC_STATE_WAITDEBUG_FILE_OPENED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   196
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   197
    /* create WaitPython_pipe */
616
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   198
    if(rt_pipe_create(&WaitPython_pipe, "WaitPython_pipe", WAITPYTHON_PIPE_MINOR, PIPE_SIZE))
342
80e5876bc53b Replacing Debug rt_sem by rt_pipe
greg
parents: 336
diff changeset
   199
        goto error;
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   200
    PLC_state |= PLC_STATE_WAITPYTHON_PIPE_CREATED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   201
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   202
    /* open WaitPython_pipe*/
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   203
    if((WaitPython_pipe_fd = open(WAITPYTHON_PIPE_DEVICE, O_RDWR)) == -1) goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   204
    PLC_state |= PLC_STATE_WAITPYTHON_FILE_OPENED;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   205
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   206
    /*** create PLC task ***/
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   207
    if(rt_task_create(&PLC_task, "PLC_task", 0, 50, 0)) goto error;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   208
    PLC_state |= PLC_STATE_TASK_CREATED;
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   209
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   210
    if(__init(argc,argv)) goto error;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   211
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   212
    /* start PLC task */
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   213
    if(rt_task_start(&PLC_task, &PLC_task_proc, NULL)) goto error;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   214
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   215
    return 0;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   216
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   217
error:
616
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   218
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   219
    PLC_cleanup_all();
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   220
    return 1;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   221
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   222
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   223
#define DEBUG_FREE 0
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   224
#define DEBUG_BUSY 1
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   225
static long debug_state = DEBUG_FREE;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   226
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   227
int TryEnterDebugSection(void)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   228
{
616
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   229
    if(AtomicCompareExchange(
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   230
        &debug_state,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   231
        DEBUG_FREE,
616
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   232
        DEBUG_BUSY) == DEBUG_FREE){
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   233
        if(__DEBUG){
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   234
            return 1;
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   235
        }
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   236
        AtomicCompareExchange( &debug_state, DEBUG_BUSY, DEBUG_FREE);
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   237
    }
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   238
    return 0;
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   239
}
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   240
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   241
#define DEBUG_UNLOCK 1
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   242
void LeaveDebugSection(void)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   243
{
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   244
    if(AtomicCompareExchange( &debug_state, 
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   245
        DEBUG_BUSY, DEBUG_FREE) == DEBUG_BUSY){
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   246
        char msg = DEBUG_UNLOCK;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   247
        /* signal to NRT for wakeup */
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   248
        rt_pipe_write(&Debug_pipe, &msg, sizeof(msg), P_NORMAL);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   249
    }
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   250
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   251
397
6a7ff66a811d Adding support for forcing tick count to return to zero as the same time than all tasks firing are synchronized
laurent
parents: 345
diff changeset
   252
extern unsigned long __tick;
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   253
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   254
#define DEBUG_PENDING_DATA 1
446
1edde533db19 Some cleanup in PLC status - removed that \"Starting\" state ...
ed
parents: 397
diff changeset
   255
int WaitDebugData(unsigned long *tick)
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   256
{
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   257
    char cmd;
345
a3520d75a722 get the WaitPythonCommands return (semaphore error code) to quit python_iterator loop when semaphore is destroyed
greg
parents: 342
diff changeset
   258
    int res;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   259
    /* Wait signal from PLC thread */
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   260
    res = read(WaitDebug_pipe_fd, &cmd, sizeof(cmd));
617
7c23fac40a2a fixed debug with xenomai, fixed unprotected access to ___debug_tick
Edouard Tisserant
parents: 616
diff changeset
   261
    if (res == sizeof(cmd) && cmd == DEBUG_PENDING_DATA){
7c23fac40a2a fixed debug with xenomai, fixed unprotected access to ___debug_tick
Edouard Tisserant
parents: 616
diff changeset
   262
        *tick = __debug_tick;
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   263
        return 0;
617
7c23fac40a2a fixed debug with xenomai, fixed unprotected access to ___debug_tick
Edouard Tisserant
parents: 616
diff changeset
   264
    }
345
a3520d75a722 get the WaitPythonCommands return (semaphore error code) to quit python_iterator loop when semaphore is destroyed
greg
parents: 342
diff changeset
   265
    return -1;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   266
}
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   267
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   268
/* Called by PLC thread when debug_publish finished
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   269
 * This is supposed to unlock debugger thread in WaitDebugData*/
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   270
void InitiateDebugTransfer()
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   271
{
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   272
    char msg = DEBUG_PENDING_DATA;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   273
    /* remember tick */
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   274
    __debug_tick = __tick;
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   275
    /* signal debugger thread it can read data */
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   276
    rt_pipe_write(&WaitDebug_pipe, &msg, sizeof(msg), P_NORMAL);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   277
}
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   278
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   279
int suspendDebug(int disable)
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   280
{
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   281
    char cmd = DEBUG_UNLOCK;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   282
    while(AtomicCompareExchange(
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   283
            &debug_state,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   284
            DEBUG_FREE,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   285
            DEBUG_BUSY) != DEBUG_FREE &&
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   286
            cmd == DEBUG_UNLOCK){
616
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   287
       if(read(Debug_pipe_fd, &cmd, sizeof(cmd)) != sizeof(cmd)){
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   288
           return -1;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   289
       }
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   290
    }
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   291
    __DEBUG = !disable;
617
7c23fac40a2a fixed debug with xenomai, fixed unprotected access to ___debug_tick
Edouard Tisserant
parents: 616
diff changeset
   292
    if (disable)
7c23fac40a2a fixed debug with xenomai, fixed unprotected access to ___debug_tick
Edouard Tisserant
parents: 616
diff changeset
   293
        AtomicCompareExchange( &debug_state, DEBUG_BUSY, DEBUG_FREE);
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   294
    return 0;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   295
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   296
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   297
void resumeDebug(void)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   298
{
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   299
    AtomicCompareExchange( &debug_state, DEBUG_BUSY, DEBUG_FREE);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   300
}
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   301
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   302
#define PYTHON_PENDING_COMMAND 1
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   303
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   304
#define PYTHON_FREE 0
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   305
#define PYTHON_BUSY 1
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   306
static long python_state = PYTHON_FREE;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   307
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   308
int WaitPythonCommands(void)
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   309
{ 
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   310
    char cmd;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   311
    /* Wait signal from PLC thread */
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   312
    if(read(WaitPython_pipe_fd, &cmd, sizeof(cmd))==sizeof(cmd) && cmd==PYTHON_PENDING_COMMAND){
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   313
        return 0;
345
a3520d75a722 get the WaitPythonCommands return (semaphore error code) to quit python_iterator loop when semaphore is destroyed
greg
parents: 342
diff changeset
   314
    }
a3520d75a722 get the WaitPythonCommands return (semaphore error code) to quit python_iterator loop when semaphore is destroyed
greg
parents: 342
diff changeset
   315
    return -1;
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   316
}
336
ae3488c79283 Fixed bug : Segmentation fault or locks when stop PLC if no CAN network.
greg
parents: 321
diff changeset
   317
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   318
/* Called by PLC thread on each new python command*/
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   319
void UnBlockPythonCommands(void)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   320
{
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   321
    char msg = PYTHON_PENDING_COMMAND;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   322
    rt_pipe_write(&WaitPython_pipe, &msg, sizeof(msg), P_NORMAL);
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   323
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   324
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   325
int TryLockPython(void)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   326
{
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   327
    return AtomicCompareExchange(
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   328
        &python_state,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   329
        PYTHON_FREE,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   330
        PYTHON_BUSY) == PYTHON_FREE;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   331
}
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   332
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   333
#define UNLOCK_PYTHON 1
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   334
void LockPython(void)
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   335
{
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   336
    char cmd = UNLOCK_PYTHON;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   337
    while(AtomicCompareExchange(
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   338
            &python_state,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   339
            PYTHON_FREE,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   340
            PYTHON_BUSY) != PYTHON_FREE &&
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   341
            cmd == UNLOCK_PYTHON){
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   342
       read(Python_pipe_fd, &cmd, sizeof(cmd));
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   343
    }
321
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   344
}
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   345
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   346
void UnLockPython(void)
5a4e6278a18b Adding support for Xenomai targets.
lbessard
parents:
diff changeset
   347
{
615
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   348
    if(AtomicCompareExchange(
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   349
            &python_state,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   350
            PYTHON_BUSY,
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   351
            PYTHON_FREE) == PYTHON_BUSY){
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   352
        if(rt_task_self()){/*is that the real time task ?*/
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   353
           char cmd = UNLOCK_PYTHON;
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   354
           rt_pipe_write(&Python_pipe, &cmd, sizeof(cmd), P_NORMAL);
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   355
        }/* otherwise, no signaling from non real time */
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   356
    }    /* as plc does not wait for lock. */
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   357
}
72bc3e53a1fa Xenomai Fix : build
Edouard Tisserant
parents: 446
diff changeset
   358
616
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   359
int CheckRetainBuffer(void)
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   360
{
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   361
	return 1;
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   362
}
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   363
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   364
void ValidateRetainBuffer(void)
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   365
{
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   366
}
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   367
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   368
void InValidateRetainBuffer(void)
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   369
{
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   370
}
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   371
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   372
void Retain(unsigned int offset, unsigned int count, void *p)
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   373
{
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   374
}
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   375
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   376
void Remind(unsigned int offset, unsigned int count, void *p)
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   377
{
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   378
}
b9271faec96e Xenomai Fix : runs, but still fail in debug
Edouard Tisserant
parents: 615
diff changeset
   379