Use custom build of ev3-api, and own screen refresh

This commit is contained in:
Michal Moskal 2017-07-07 10:38:20 +01:00
parent 6fb7908b21
commit 43b167957b
6 changed files with 43 additions and 18 deletions

6
TODO.md Normal file
View File

@ -0,0 +1,6 @@
* [ ] try unlink ELF file before uploading
* [ ] implement serialPoll
* [ ] try some motors
## Further down
* [ ] have some protocol for restarting user app if it's running (flag file somewhere?)

View File

@ -117,6 +117,14 @@ namespace pxt.editor {
}).filter(v => !!v)) }).filter(v => !!v))
} }
rmAsync(path: string): Promise<void> {
let rmReq = this.allocSystem(path.length + 1, 0x9c)
U.memcpy(rmReq, 6, U.stringToUint8Array(path))
return this.talkAsync(rmReq)
.then(resp => { })
}
private initAsync() { private initAsync() {
return Promise.resolve() return Promise.resolve()
} }

View File

@ -137,7 +137,10 @@ Button *getButton(int id) {
} }
void target_init() { void target_init() {
InitEV3(); OutputInit();
ButtonLedInit();
SoundInit();
getWButtons(); // always on - handles ESCAPE key getWButtons(); // always on - handles ESCAPE key
DMESG("runtime started [%s]", HardwareVersionString()); DMESG("runtime started [%s]", HardwareVersionString());
} }

View File

@ -262,6 +262,7 @@ void dumpDmesg() {
// TODO // TODO
} }
void screen_init();
void initRuntime() { void initRuntime() {
daemon(1, 1); daemon(1, 1);
startTime = currTime(); startTime = currTime();
@ -270,6 +271,7 @@ void initRuntime() {
pthread_create(&disp, NULL, evtDispatcher, NULL); pthread_create(&disp, NULL, evtDispatcher, NULL);
pthread_detach(disp); pthread_detach(disp);
target_init(); target_init();
screen_init();
startUser(); startUser();
} }

View File

@ -19,10 +19,10 @@
"test.ts" "test.ts"
], ],
"npmDependencies": { "npmDependencies": {
"ev3api-bin": "1.0.0" "ev3api-bin": "1.1.0"
}, },
"public": true, "public": true,
"dependencies": { "dependencies": {
"base": "file:../base" "base": "file:../base"
} }
} }

View File

@ -1,5 +1,6 @@
#include "pxt.h" #include "pxt.h"
#include "ev3.h" #include "ev3.h"
#include <pthread.h>
/** /**
* Drawing modes * Drawing modes
@ -24,32 +25,19 @@ enum class ScreenFont {
// We only support up to 4 arguments for C++ functions - need to pack them on the TS side // We only support up to 4 arguments for C++ functions - need to pack them on the TS side
namespace screen { namespace screen {
extern "C" {
void DisplaySetPixel(byte X, byte Y);
void DisplayClrPixel(byte X, byte Y);
void DisplayXorPixel(byte X, byte Y);
}
void pokeScreen() {
DisplayXorPixel(0, 0);
DisplayXorPixel(0, 0);
}
//% //%
void _drawLine(uint32_t p0, uint32_t p1, Draw mode) { void _drawLine(uint32_t p0, uint32_t p1, Draw mode) {
DMESG("line %x %x %x", p0, p1, mode);
LineOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode); LineOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode);
} }
//% //%
void _drawRect(uint32_t p0, uint32_t p1, Draw mode) { void _drawRect(uint32_t p0, uint32_t p1, Draw mode) {
DMESG("rect %x %x %x", p0, p1, mode);
RectOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode); RectOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode);
} }
//% //%
void _drawEllipse(uint32_t p0, uint32_t p1, Draw mode) { void _drawEllipse(uint32_t p0, uint32_t p1, Draw mode) {
DMESG("ellip %x %x %x", p0, p1, mode);
EllipseOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode); EllipseOutEx(XX(p0), YY(p0), XX(p1), YY(p1), (uint32_t)mode);
} }
@ -69,8 +57,6 @@ void clear() {
//% //%
void scroll(int v) { void scroll(int v) {
LcdScroll(v); LcdScroll(v);
pokeScreen(); // missing in ev3-api
//LcdUpdate();
} }
/** Set font for drawText() */ /** Set font for drawText() */
@ -79,3 +65,23 @@ void setFont(ScreenFont font) {
LcdSelectFont((uint8_t)font); LcdSelectFont((uint8_t)font);
} }
} }
namespace pxt {
void *screenRefresh(void *dummy) {
while (true) {
sleep_core_us(30000);
LcdUpdate();
}
}
void screen_init() {
LcdInitNoAutoRefresh();
LcdClean();
pthread_t pid;
pthread_create(&pid, NULL, screenRefresh, NULL);
pthread_detach(pid);
}
}