|
@@
-39,6
+39,7
rtems_task spiq_task(rtems_task_argument
|
|
39
|
|
|
39
|
|
|
40
|
while(true){
|
|
40
|
while(true){
|
|
41
|
rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
|
|
41
|
rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
|
|
|
|
|
42
|
PRINTF("in SPIQ *** got SPW_LINKERR_EVENT\n")
|
|
42
|
|
|
43
|
|
|
43
|
// [0] SUSPEND RECV ADN SEND TASKS
|
|
44
|
// [0] SUSPEND RECV ADN SEND TASKS
|
|
44
|
rtems_task_suspend( Task_id[ TASKID_RECV ] );
|
|
45
|
rtems_task_suspend( Task_id[ TASKID_RECV ] );
|
|
@@
-70,11
+71,11
rtems_task spiq_task(rtems_task_argument
|
|
70
|
// [3] COMPLETE RECOVERY ACTION AFTER SY_LFR_DPU_CONNECT_ATTEMPTS
|
|
71
|
// [3] COMPLETE RECOVERY ACTION AFTER SY_LFR_DPU_CONNECT_ATTEMPTS
|
|
71
|
if ( status == RTEMS_SUCCESSFUL ) // [3.a] the link is in run state and has been started successfully
|
|
72
|
if ( status == RTEMS_SUCCESSFUL ) // [3.a] the link is in run state and has been started successfully
|
|
72
|
{
|
|
73
|
{
|
|
73
|
status = rtems_task_resume( Task_id[ TASKID_SEND ] );
|
|
74
|
status = rtems_task_restart( Task_id[ TASKID_SEND ], 1 );
|
|
74
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
75
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
75
|
PRINTF("in SPIQ *** ERR resuming SEND Task\n")
|
|
76
|
PRINTF("in SPIQ *** ERR resuming SEND Task\n")
|
|
76
|
}
|
|
77
|
}
|
|
77
|
status = rtems_task_resume( Task_id[ TASKID_RECV ] );
|
|
78
|
status = rtems_task_restart( Task_id[ TASKID_RECV ], 1 );
|
|
78
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
79
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
79
|
PRINTF("in SPIQ *** ERR resuming RECV Task\n")
|
|
80
|
PRINTF("in SPIQ *** ERR resuming RECV Task\n")
|
|
80
|
}
|
|
81
|
}
|
|
@@
-85,7
+86,7
rtems_task spiq_task(rtems_task_argument
|
|
85
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
86
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
86
|
PRINTF1("in SPIQ *** ERR enter_mode *** code %d\n", status)
|
|
87
|
PRINTF1("in SPIQ *** ERR enter_mode *** code %d\n", status)
|
|
87
|
}
|
|
88
|
}
|
|
88
|
// wake the WTDG task
|
|
89
|
// wake the WTDG task up to wait for the link recovery
|
|
89
|
status = rtems_event_send ( Task_id[TASKID_WTDG], RTEMS_EVENT_0 );
|
|
90
|
status = rtems_event_send ( Task_id[TASKID_WTDG], RTEMS_EVENT_0 );
|
|
90
|
rtems_task_suspend( RTEMS_SELF );
|
|
91
|
rtems_task_suspend( RTEMS_SELF );
|
|
91
|
}
|
|
92
|
}
|
|
@@
-206,7
+207,7
rtems_task send_task( rtems_task_argumen
|
|
206
|
{
|
|
207
|
{
|
|
207
|
status = write( fdSPW, incomingData, size );
|
|
208
|
status = write( fdSPW, incomingData, size );
|
|
208
|
if (status == -1){
|
|
209
|
if (status == -1){
|
|
209
|
PRINTF2("in SEND *** (2.a) ERR = %d, size = %d\n", status, size)
|
|
210
|
PRINTF2("in SEND *** (2.a) ERRNO = %d, size = %d\n", errno, size)
|
|
210
|
}
|
|
211
|
}
|
|
211
|
}
|
|
212
|
}
|
|
212
|
else // the incoming message is a spw_ioctl_pkt_send structure
|
|
213
|
else // the incoming message is a spw_ioctl_pkt_send structure
|
|
@@
-216,14
+217,14
rtems_task send_task( rtems_task_argumen
|
|
216
|
{
|
|
217
|
{
|
|
217
|
status = write( fdSPW, spw_ioctl_send->data, spw_ioctl_send->dlen );
|
|
218
|
status = write( fdSPW, spw_ioctl_send->data, spw_ioctl_send->dlen );
|
|
218
|
if (status == -1){
|
|
219
|
if (status == -1){
|
|
219
|
PRINTF2("in SEND *** (2.b) ERR = %d, dlen = %d\n", status, spw_ioctl_send->dlen)
|
|
220
|
PRINTF2("in SEND *** (2.b) ERRNO = %d, dlen = %d\n", errno, spw_ioctl_send->dlen)
|
|
220
|
}
|
|
221
|
}
|
|
221
|
}
|
|
222
|
}
|
|
222
|
else
|
|
223
|
else
|
|
223
|
{
|
|
224
|
{
|
|
224
|
status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
|
|
225
|
status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, spw_ioctl_send );
|
|
225
|
if (status == -1){
|
|
226
|
if (status == -1){
|
|
226
|
PRINTF2("in SEND *** (2.c) ERR = %d, dlen = %d\n", status, spw_ioctl_send->dlen)
|
|
227
|
PRINTF2("in SEND *** (2.c) ERRNO = %d, dlen = %d\n", errno, spw_ioctl_send->dlen)
|
|
227
|
PRINTF1(" hlen = %d\n", spw_ioctl_send->hlen)
|
|
228
|
PRINTF1(" hlen = %d\n", spw_ioctl_send->hlen)
|
|
228
|
}
|
|
229
|
}
|
|
229
|
}
|
|
230
|
}
|
|
@@
-278,16
+279,19
rtems_task wtdg_task( rtems_task_argumen
|
|
278
|
}
|
|
279
|
}
|
|
279
|
|
|
280
|
|
|
280
|
// restart the SPIQ task
|
|
281
|
// restart the SPIQ task
|
|
281
|
rtems_task_restart( Task_id[TASKID_SPIQ], 1 );
|
|
282
|
status = rtems_task_restart( Task_id[TASKID_SPIQ], 1 );
|
|
|
|
|
283
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
|
|
|
284
|
PRINTF("in SPIQ *** ERR restarting SPIQ Task\n")
|
|
|
|
|
285
|
}
|
|
282
|
|
|
286
|
|
|
283
|
// resume RECV and SEND
|
|
287
|
// restart RECV and SEND
|
|
284
|
status = rtems_task_restart( Task_id[ TASKID_SEND ], 1 );
|
|
288
|
status = rtems_task_restart( Task_id[ TASKID_SEND ], 1 );
|
|
285
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
289
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
286
|
PRINTF("in SPIQ *** ERR resuming SEND Task\n")
|
|
290
|
PRINTF("in SPIQ *** ERR restarting SEND Task\n")
|
|
287
|
}
|
|
291
|
}
|
|
288
|
status = rtems_task_restart( Task_id[ TASKID_RECV ], 1 );
|
|
292
|
status = rtems_task_restart( Task_id[ TASKID_RECV ], 1 );
|
|
289
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
293
|
if ( status != RTEMS_SUCCESSFUL ) {
|
|
290
|
PRINTF("in SPIQ *** ERR resuming RECV Task\n")
|
|
294
|
PRINTF("in SPIQ *** ERR restarting RECV Task\n")
|
|
291
|
}
|
|
295
|
}
|
|
292
|
}
|
|
296
|
}
|
|
293
|
}
|
|
297
|
}
|
|
@@
-370,7
+374,7
int spacewire_configure_link( int fd )
|
|
370
|
status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
|
|
374
|
status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
|
|
371
|
if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
|
|
375
|
if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK\n")
|
|
372
|
//
|
|
376
|
//
|
|
373
|
status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 0); // transmission blocks on full
|
|
377
|
status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 1); // transmission blocks when no transmission descriptor is available
|
|
374
|
if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
|
|
378
|
if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL\n")
|
|
375
|
//
|
|
379
|
//
|
|
376
|
status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909); // [Time Rx : Time Tx : Link error : Tick-out IRQ]
|
|
380
|
status = ioctl(fd, SPACEWIRE_IOCTRL_SET_TCODE_CTRL, 0x0909); // [Time Rx : Time Tx : Link error : Tick-out IRQ]
|