author | William Roberts <williamr@symbian.org> |
Mon, 28 Jun 2010 11:25:30 +0100 | |
branch | GCC_SURGE |
changeset 184 | 0e2270015475 |
parent 104 | 466a0df5c15a |
permissions | -rw-r--r-- |
/* * Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of the License "Eclipse Public License v1.0" * which accompanies this distribution, and is available * at the URL "http://www.eclipse.org/legal/epl-v10.html". * * Initial Contributors: * Nokia Corporation - initial contribution. * * Contributors: * * Description: * e32\personality\example\personality.h * External interface header file for example RTOS personality. * This will be included by the real time application source files. * * WARNING: This file contains some APIs which are internal and are subject * to change without notice. Such APIs should therefore not be used * outside the Kernel and Hardware Services package. */ /** @file @internalComponent */ #ifndef __PERSONALITY_H__ #define __PERSONALITY_H__ // should be separate C function #define kprintf Kern::Printf #define assert(x) __NK_ASSERT_ALWAYS(x) #if defined(__GCC32__) typedef unsigned long size_t; #elif defined(__CW32__) typedef unsigned int size_t; #elif defined(__ARMCC__) typedef unsigned int size_t; #elif defined(__GCCE__) typedef unsigned int size_t; #endif #ifdef __cplusplus extern "C" { #endif /* Return codes */ #define OK 0 #define BAD_TASK_ID (-100) #define BAD_PRIORITY (-101) #define TIMED_OUT (-102) #define TIMER_IN_USE (-103) #define BAD_ENTRY_POINT (-104) #define BAD_STACK_SIZE (-105) #define OUT_OF_MEMORY (-106) #define BAD_TIMER_ID (-107) #define BAD_TIME_INTERVAL (-108) #define BAD_SEM_ID (-109) /* Task priority range */ #define MIN_TASK_PRIORITY 0 #define MAX_TASK_PRIORITY 255 /* Task stack size */ #define MIN_STACK_SIZE 256 /* Special task IDs */ #define TASK_ID_ISR (-1) #define TASK_ID_UNKNOWN (-2) /* non-personality layer thread */ /* Time values */ #define NO_WAIT 0 /* Never block */ #define WAIT_FOREVER (-1) /* Never time out */ /* Special message IDs */ #define MSG_ID_TIMEOUT 0x80000000 typedef void (*task_entry)(void); /* Information required to create a task */ typedef struct _taskinfo { task_entry entry_pt; int priority; size_t stack_size; short task_id; short auto_start; } taskinfo; /* Externally supplied table of tasks which will be created at boot time */ extern const taskinfo task_list[]; /* Memory pool creation info */ typedef struct _poolinfo { size_t block_size; unsigned block_count; } poolinfo; /* Externally supplied list of memory pools which will be created at boot time */ extern const poolinfo pool_list[]; /* Message header */ typedef struct _msghdr { struct _msghdr* next; int msg_id; int sending_task_id; } msghdr; /* Timers */ extern const int timer_count; typedef struct _timer_msg { msghdr header; void* cookie; unsigned count; } timer_msg; /* Semaphores */ extern const int semaphore_count; /* Task APIs */ extern int suspend_task(int id); /* call from any thread */ extern int resume_task(int id); /* call from any thread */ extern int get_task_priority(int id); /* call from any thread */ extern int set_task_priority(int id, int priority); /* call from any thread */ extern int current_task_id(void); /* call from any thread or ISR */ extern void disable_preemption(void); /* call from any thread */ extern void enable_preemption(void); /* call from any thread */ extern int disable_interrupts(void); /* call from any thread */ extern void restore_interrupts(int level); /* call from any thread */ /* Memory management */ extern void* alloc_mem_block(size_t size); /* call from any thread or ISR */ extern void free_mem_block(void* block); /* call from any thread or ISR */ /* Messages */ extern int send_msg(int task_id, msghdr* msg); /* call from any thread or ISR */ extern int recv_msg(msghdr** msgptr, int time_ticks); /* call only from personality layer thread */ /* Timer APIs */ extern unsigned tick_count(void); /* call from any thread or ISR */ extern void delay(int time_interval); /* call from any thread */ extern int start_one_shot_timer(int timer_id, int task_id, int time_ticks, void* cookie); /* call from any thread or ISR */ extern int start_periodic_timer(int timer_id, int task_id, int initial_time_ticks, int period_ticks, void* cookie); /* call from any thread or ISR */ extern int stop_timer(int timer_id); /* call from any thread or ISR */ /* Semaphore APIs */ extern int semaphore_wait(int sem_id, int time_ticks); /* call only from personality layer thread */ extern int semaphore_signal(int sem_id); /* call from any thread or ISR */ /* Initialisation */ extern void init_personality(void); /* call from extension entry point */ /* Communication with EPOC */ extern void send_to_epoc(msghdr* msgptr); #ifdef __cplusplus } #endif #endif