Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mail_driven_task_example
Diff: Task.h
- Revision:
- 2:b12e4c1338db
- Parent:
- 1:381a6f6263c7
- Child:
- 3:0c93bdf73d87
diff -r 381a6f6263c7 -r b12e4c1338db Task.h
--- a/Task.h Thu Dec 25 01:58:14 2014 +0000
+++ b/Task.h Thu Dec 25 02:32:12 2014 +0000
@@ -8,6 +8,7 @@
using namespace std;
+/** Log level symbol definition */
typedef enum {
LOG_DEBUG = 0,
LOG_INFO,
@@ -15,13 +16,17 @@
LOG_ERR
} LogLevel;
+/** max length of mail queue block per task */
#define MAX_MAIL_NUM 16
+
+/** max length of log string */
#define LOG_BUF_SIZE 64
typedef void (*Routine)(void const *argument);
typedef uint32_t MessageID;
typedef uint32_t TaskID;
+/** struct for static task configuration */
struct TaskConfig {
TaskConfig(
const char *task_name,
@@ -43,6 +48,7 @@
unsigned char *stackPointer;
};
+/** struct for mail event passing */
struct MailPacket {
uint32_t messageId;
void *packet;
@@ -50,21 +56,23 @@
typedef Mail<MailPacket, MAX_MAIL_NUM> MailBox;
-class Task {
+/** Task class : A Thread which driven by mail event, and it have own logger. */
+class Task
+{
public:
/** Initialize task config table.
- @param cfg array of TaskConfig
- @param num_of_task length of cfg
- @return void
- */
+ * @param cfg array of TaskConfig
+ * @param num_of_task length of cfg
+ * @return void
+ */
static void init(TaskConfig *config, uint32_t num_of_task);
/** Send mail to task specified by task_id with Any data.
- @param task_id destination task's id
- @param message_id mail id
- @param packet any data pointer
- @return void
- */
+ * @param task_id destination task's id
+ * @param message_id mail id
+ * @param packet any data pointer
+ * @return void
+ */
static void sendMail(TaskID task_id, MessageID message_id, void *packet);
@@ -73,51 +81,53 @@
Thread *thread;
/** Wait for mail addressed to itself.
- @return received MailPacket
- */
+ * @return received MailPacket
+ */
MailPacket *waitMail();
/** Delete a mail queue block. it's responsible for received task.
- @param mail received MailPacket
- @return void
- */
+ * @param mail received MailPacket
+ * @return void
+ */
void deleteMail(MailPacket *mail);
/** Output log to task's own stream pointer.
- @param lv loglevel
- @param format log format
- @param ... log arguments
- @return void
- */
+ * @param lv loglevel
+ * @param format log format
+ * @param ... log arguments
+ * @return void
+ */
void log(LogLevel lv, const char *format, ...);
- class Logger {
+ /** Logger class */
+ class Logger
+ {
public:
/** Logger constructor
- @param task_name For log prefix
- @param sp Stream pointer for output destination(the default is USB serial).
- */
+ * @param task_name For log prefix
+ * @param sp Stream pointer for output destination(the default is USB serial).
+ */
Logger(const char *task_name, Stream *sp = Logger::sci);
-
+
/** Log level setter
- @param lv log level
- @return void
- */
+ * @param lv log level
+ * @return void
+ */
static void setLogLevel(LogLevel lv);
void setLogStream(Stream *sp);
static const char *lvSym[];
static Stream *sci;
static LogLevel lv;
- Stream *sp;
+ Stream *sp;
const char *tag;
char buf[LOG_BUF_SIZE];
};
private:
/** Create a new thread with its own logger.
- @param cfg TaskConfig struct pointer
- @return void
- */
+ * @param cfg TaskConfig struct pointer
+ * @return void
+ */
Task(TaskConfig *config);
~Task();