Espruino/targets/esp32/jswrap_rtos.c
Juergen Marsch 965d7e7026 new file: targets/esp32/docs/RTOS_for_Espruino.md
new file:   targets/esp32/jshardwareUart.c
	new file:   targets/esp32/jshardwareUart.h
	new file:   targets/esp32/jswrap_rtos.c
	new file:   targets/esp32/jswrap_rtos.h
	new file:   targets/esp32/rtosutil.c
	new file:   targets/esp32/rtosutil.h
2016-12-01 22:48:26 +01:00

135 lines
3.5 KiB
C

/*
* This file is part of Espruino, a JavaScript interpreter for Microcontrollers
*
* Copyright (C) 2013 Gordon Williams <gw@pur3.co.uk>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* ----------------------------------------------------------------------------
* Task specific exposed components.
* ----------------------------------------------------------------------------
*/
#include "jswrap_rtos.h"
#include "jsparse.h"
#include "rtosutil.h"
/*JSON{
"type" : "class",
"class" : "Queue"
}
A class to support some simple Queue handling for RTOS queues
*/
/*JSON{
"type" : "constructor",
"class" : "Queue",
"name" : "Queue",
"generate" : "jswrap_Queue_constructor",
"params" : [ ["queueName", "JsVar", "Name of the queue"] ],
"return" : ["JsVar","A Queue object"]
}
Creates a Queue Object
*/
JsVar *jswrap_Queue_constructor(JsVar *queueName){
int idx; char name[20];
JsVar *queue = jspNewObject(0, "Queue");
if (!queue) return 0;
name[jsvGetString(queueName, name, sizeof(name))] = '\0';
idx = queue_indexByName(name);
jsvObjectSetChildAndUnLock(queue, "index", jsvNewFromInteger(idx));
return queue;
}
/*JSON{
"type" : "method",
"class" : "Queue",
"name" : "read",
"generate" : "jswrap_Queue_read"
}
reads one character from queue, if available
*/
void jswrap_Queue_read(JsVar *parent) {
char data;
JsVar *idx = jsvObjectGetChild(parent,"index",1);
queue_read(jsvGetInteger(idx));
jsvUnLock(idx);
return;
}
/*JSON{
"type" : "method",
"class" : "Queue",
"name" : "writeChar",
"params" : [ ["char", "JsVar", "char to be send"] ],
"generate" : "jswrap_Queue_writeChar"
}
Writes one character to queue
*/
void jswrap_Queue_writeChar(JsVar *parent,char c){
JsVar *idx = jsvObjectGetChild(parent,"index",1);
queue_writeChar(idx,c);
}
/*JSON{
"type" : "class",
"class" : "Task"
}
A class to support some simple Task handling for RTOS tasks
*/
/*JSON{
"type" : "constructor",
"class" : "Task",
"name" : "Task",
"generate" : "jswrap_Task_constructor",
"params" : [ ["taskName", "JsVar", "Name of the task"] ],
"return" : ["JsVar","A Task object"]
}
Creates a Task Object
*/
JsVar *jswrap_Task_constructor(JsVar *taskName){
int idx; char name[20];
JsVar *task = jspNewObject(0, "Task");
if (!task) return 0;
name[jsvGetString(taskName, name, sizeof(name))] = '\0';
idx = task_indexByName(name);
jsvObjectSetChildAndUnLock(task, "index", jsvNewFromInteger(idx));
return task;
}
/*JSON{
"type" : "method",
"class" : "Task",
"name" : "suspend",
"generate" : "jswrap_Task_suspend"
}
Suspend task, be careful not to suspend Espruino task itself
*/
void jswrap_Task_suspend(JsVar *parent){
JsVar *idx = jsvObjectGetChild(parent,"index",1);
task_Suspend(jsvGetInteger(idx));
return;
}
/*JSON{
"type" : "method",
"class" : "Task",
"name" : "resume",
"generate" : "jswrap_Task_resume"
}
Resumes a suspended task
*/
void jswrap_Task_resume(JsVar *parent){
JsVar *idx = jsvObjectGetChild(parent,"index",1);
task_Resume(jsvGetInteger(idx));
return;
}
/*JSON{
"type" : "method",
"class" : "Task",
"name" : "getCurrent",
"generate" : "jswrap_Task_getCurrent",
"return" : ["JsVar","Name of current task"]
}
returns name of actual task
*/
JsVar *jswrap_Task_getCurrent(JsVar *parent){
return jsvNewFromString(task_getCurrentName());
}