| /******************************************************************************* |
| * Copyright (c) 2013 protos software gmbh (http://www.protos.de). |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * CONTRIBUTORS: |
| * Thomas Schuetz, Thomas Jung (initial contribution) |
| * |
| *******************************************************************************/ |
| |
| |
| #include "osal/etSema.h" |
| #include "osal/etTimer.h" |
| |
| #include "debugging/etMSCLogger.h" |
| #include "helpers/etTimeHelpers.h" |
| |
| extern etTimer * singleThreadedTimer; |
| |
| void etSema_construct(etSema* self){ |
| ET_MSC_LOGGER_SYNC_ENTRY("etSema", "construct") |
| |
| ET_MSC_LOGGER_SYNC_EXIT |
| } |
| void etSema_destruct(etSema* self){ |
| ET_MSC_LOGGER_SYNC_ENTRY("etSema", "destruct") |
| |
| ET_MSC_LOGGER_SYNC_EXIT |
| } |
| |
| void etSema_wakeup(etSema* self){ |
| ET_MSC_LOGGER_SYNC_ENTRY("etSema", "wakeup") |
| |
| ET_MSC_LOGGER_SYNC_EXIT |
| } |
| |
| void etSema_waitForWakeup(etSema* self){ |
| static etTime nextTime = {0,0}; |
| etTime actualTime; |
| ET_MSC_LOGGER_SYNC_ENTRY("etSema", "waitForWakeup") |
| /* busy wait as specified in etphys */ |
| |
| getTimeFromTarget(&actualTime); |
| if (etTimeHelpers_isGreater(&actualTime, &nextTime)){ |
| etTimeHelpers_add(&nextTime,&(singleThreadedTimer->timerInterval)); |
| /* call the do actions for the single thread */ |
| singleThreadedTimer->timerFunction(singleThreadedTimer->timerFunctionData); |
| } |
| ET_MSC_LOGGER_SYNC_EXIT |
| } |
| |
| void etSema_wakeupFromISR(etSema* self){ |
| ET_MSC_LOGGER_SYNC_ENTRY("etSema", "wakeupFromISR") |
| |
| ET_MSC_LOGGER_SYNC_EXIT |
| } |
| |