Home Page

This commit is contained in:
Steven Tracey 2024-11-21 16:28:39 -05:00
parent 27ca83ad4f
commit 94843fa797
4 changed files with 81 additions and 7 deletions

View File

@ -19,6 +19,12 @@ typedef struct { const char *p; ptrdiff_t n; } _GoString_;
/* Start of preamble from import "C" comments. */ /* Start of preamble from import "C" comments. */
#line 3 "ctils.go"
#include <stdlib.h>
#line 1 "cgo-generated-wrapper"
/* End of preamble from import "C" comments. */ /* End of preamble from import "C" comments. */
@ -74,8 +80,22 @@ typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;
extern "C" { extern "C" {
#endif #endif
/* Return type for prepareCStringArray */
struct prepareCStringArray_return {
char** r0;
GoInt r1;
};
extern __declspec(dllexport) struct prepareCStringArray_return prepareCStringArray(GoSlice goStrings);
extern __declspec(dllexport) void freeCStringArray(char** cStrings, GoInt length);
extern __declspec(dllexport) void loadConfigs(); extern __declspec(dllexport) void loadConfigs();
extern __declspec(dllexport) GoSlice getConfigNames();
/* Return type for getConfigNames */
struct getConfigNames_return {
char** r0;
int r1;
};
extern __declspec(dllexport) struct getConfigNames_return getConfigNames();
extern __declspec(dllexport) char* getCode(GoString configName); extern __declspec(dllexport) char* getCode(GoString configName);
extern __declspec(dllexport) GoUint64 getTimeRemaining(GoInt n); extern __declspec(dllexport) GoUint64 getTimeRemaining(GoInt n);
extern __declspec(dllexport) GoUint64 getTimeRemainingMS(GoInt n); extern __declspec(dllexport) GoUint64 getTimeRemainingMS(GoInt n);

View File

@ -15,6 +15,9 @@
#include "../libs/GUI/GUI_BMPfile.h" #include "../libs/GUI/GUI_BMPfile.h"
#include "../libs/Config/Debug.h" #include "../libs/Config/Debug.h"
extern char** getConfigNames(int* length);
extern void freeCStringArray(char** cStrings, int length);
void Handler(int sigNum) { void Handler(int sigNum) {
DebugLine(28, 0, "Caught signal %d\n", sigNum); DebugLine(28, 0, "Caught signal %d\n", sigNum);
EPD_2in13_V4_Init(); EPD_2in13_V4_Init();
@ -31,19 +34,35 @@ void Handler(int sigNum) {
} }
void home(UWORD *blackImage) { void home(UWORD *blackImage) {
int length;
char** configNames = getConfigNames(&length);
if (configNames == NULL || length == 0) {
DebugLine(10, 0, "No configs found\n");
return;
}
Paint_NewImage(blackImage, EPD_2in13_V4_WIDTH, EPD_2in13_V4_HEIGHT, 0, WHITE); Paint_NewImage(blackImage, EPD_2in13_V4_WIDTH, EPD_2in13_V4_HEIGHT, 0, WHITE);
EPD_2in13_V4_Init(); EPD_2in13_V4_Init();
Paint_SelectImage(blackImage);
Paint_Clear(WHITE);
for (int i = 0; i < length; ++i) {
Paint_DrawString(5, 5 + (i * 20), configNames[i], &Font12, WHITE, BLACK);
}
EPD_2in13_V4_Display_Base(blackImage);
freeCStringArray(configNames, length);
} }
void code(UWORD *blackImage) { void code(UWORD *blackImage) {
int ch; int ch;
codeLoop:
while(1) { while(1) {
ch = getch(); ch = getch();
if (ch != ERR) { if (ch != ERR) {
if (ch == 'q') break; if (ch == 'q') break;
DebugLine(2, 0, "Key Pressed: %c\n", ch); DebugLine(2, 0, "Key Pressed: %c\n", ch);
} }
Paint_NewImage(blackImage, EPD_2in13_V4_WIDTH, EPD_2in13_V4_HEIGHT, 90, WHITE); Paint_NewImage(blackImage, EPD_2in13_V4_WIDTH, EPD_2in13_V4_HEIGHT, 90, WHITE);
@ -72,7 +91,7 @@ void code(UWORD *blackImage) {
for (int i = getTimeRemainingMS(30);; i = getTimeRemainingMS(30)) { for (int i = getTimeRemainingMS(30);; i = getTimeRemainingMS(30)) {
ch = getch(); ch = getch();
if (ch != ERR) { if (ch != ERR) {
if (ch == 'q') break; if (ch == 'q') return;
} }
if (i > lastI) break; if (i > lastI) break;
startTime = clock(); startTime = clock();
@ -117,6 +136,7 @@ int drawLoop() {
return -1; return -1;
} }
home(blackImage);
code(blackImage); code(blackImage);
return 0; return 0;

24
go/ctils.go Normal file
View File

@ -0,0 +1,24 @@
package main
/*
#include <stdlib.h>
*/
import "C"
import "unsafe"
//export prepareCStringArray
func prepareCStringArray(goStrings []string) (**C.char, int) {
cStrings := make([]*C.char, len(goStrings))
for i, s := range goStrings {
cStrings[i] = C.CString(s)
}
return (**C.char)(unsafe.Pointer(&cStrings[0])), len(goStrings)
}
//export freeCStringArray
func freeCStringArray(cStrings **C.char, length int) {
array := (*[1 << 30]*C.char)(unsafe.Pointer(cStrings))[:length:length]
for _, s := range array {
C.free(unsafe.Pointer(s))
}
}

View File

@ -10,10 +10,12 @@ import (
"hash" "hash"
"log" "log"
"os" "os"
"path/filepath"
"runtime" "runtime"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"unsafe"
) )
var token string var token string
@ -119,17 +121,25 @@ func loadConfigs() {
Format: format, Format: format,
} }
configs[fileEntry.Name()] = config fileName := fileEntry.Name()
ext := filepath.Ext(fileName)
configs[strings.TrimSuffix(fileName, ext)] = config
} }
} }
//export getConfigNames //export getConfigNames
func getConfigNames() []string { func getConfigNames() (**C.char, C.int) {
names := make([]string, 0, len(configs)) names := make([]string, 0, len(configs))
for name := range configs { for name := range configs {
names = append(names, name) names = append(names, name)
} }
return names cStrings := make([]*C.char, len(names))
for i, name := range names {
cStrings[i] = C.CString(name)
}
return (**C.char)(unsafe.Pointer(&cStrings[0])), C.int(len(names))
} }
//export getCode //export getCode
@ -150,4 +160,4 @@ func getTimeRemainingMS(n int) uint64 {
return (uint64(n) * 1000) - (uint64(time.Now().UnixNano()/1e6) % (uint64(n) * 1000)) return (uint64(n) * 1000) - (uint64(time.Now().UnixNano()/1e6) % (uint64(n) * 1000))
} }
func main() {} //func main() {}