mirror of https://github.com/jetkvm/kvm.git
180 lines
4.3 KiB
Go
180 lines
4.3 KiB
Go
//go:build linux
|
|
|
|
package native
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
"unsafe"
|
|
)
|
|
|
|
// #cgo LDFLAGS: -Ljetkvm-native
|
|
// #include "ctrl.h"
|
|
// #include <stdlib.h>
|
|
// extern void jetkvm_video_state_handler(jetkvm_video_state_t *state);
|
|
// static inline void jetkvm_setup_video_state_handler() {
|
|
// jetkvm_set_video_state_handler(&jetkvm_video_state_handler);
|
|
// }
|
|
import "C"
|
|
|
|
//export jetkvm_video_state_handler
|
|
func jetkvm_video_state_handler(state *C.jetkvm_video_state_t) {
|
|
nativeLogger.Info().Msg("video state handler")
|
|
nativeLogger.Info().Msg(fmt.Sprintf("state: %+v", state))
|
|
}
|
|
|
|
func setVideoStateHandler() {
|
|
C.jetkvm_setup_video_state_handler()
|
|
}
|
|
|
|
func (n *Native) StartNativeVideo() {
|
|
setVideoStateHandler()
|
|
C.jetkvm_ui_init()
|
|
|
|
n.UpdateLabelIfChanged("boot_screen_version", n.AppVersion.String())
|
|
|
|
go func() {
|
|
for {
|
|
C.jetkvm_ui_tick()
|
|
time.Sleep(5 * time.Millisecond)
|
|
}
|
|
}()
|
|
|
|
if C.jetkvm_video_init() != 0 {
|
|
nativeLogger.Error().Msg("failed to initialize video")
|
|
return
|
|
}
|
|
C.jetkvm_video_start()
|
|
|
|
close(n.ready)
|
|
}
|
|
|
|
func (n *Native) StopNativeVideo() {
|
|
C.jetkvm_video_stop()
|
|
}
|
|
|
|
func (n *Native) SwitchToScreen(screen string) {
|
|
screenCStr := C.CString(screen)
|
|
defer C.free(unsafe.Pointer(screenCStr))
|
|
C.jetkvm_ui_load_screen(screenCStr)
|
|
}
|
|
|
|
func (n *Native) GetCurrentScreen() string {
|
|
screenCStr := C.jetkvm_ui_get_current_screen()
|
|
return C.GoString(screenCStr)
|
|
}
|
|
|
|
func (n *Native) ObjSetState(objName string, state string) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
stateCStr := C.CString(state)
|
|
defer C.free(unsafe.Pointer(stateCStr))
|
|
C.jetkvm_ui_set_state(objNameCStr, stateCStr)
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) ObjAddFlag(objName string, flag string) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
flagCStr := C.CString(flag)
|
|
defer C.free(unsafe.Pointer(flagCStr))
|
|
C.jetkvm_ui_add_flag(objNameCStr, flagCStr)
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) ObjClearFlag(objName string, flag string) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
flagCStr := C.CString(flag)
|
|
defer C.free(unsafe.Pointer(flagCStr))
|
|
C.jetkvm_ui_clear_flag(objNameCStr, flagCStr)
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) ObjHide(objName string) (bool, error) {
|
|
return n.ObjAddFlag(objName, "LV_OBJ_FLAG_HIDDEN")
|
|
}
|
|
|
|
func (n *Native) ObjShow(objName string) (bool, error) {
|
|
return n.ObjClearFlag(objName, "LV_OBJ_FLAG_HIDDEN")
|
|
}
|
|
|
|
func (n *Native) ObjSetOpacity(objName string, opacity int) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
|
|
C.jetkvm_ui_set_opacity(objNameCStr, C.u_int8_t(opacity))
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) ObjFadeIn(objName string, duration uint32) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
|
|
C.jetkvm_ui_fade_in(objNameCStr, C.u_int32_t(duration))
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) ObjFadeOut(objName string, duration uint32) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
|
|
C.jetkvm_ui_fade_out(objNameCStr, C.u_int32_t(duration))
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) LabelSetText(objName string, text string) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
|
|
textCStr := C.CString(text)
|
|
defer C.free(unsafe.Pointer(textCStr))
|
|
|
|
ret := C.jetkvm_ui_set_text(objNameCStr, textCStr)
|
|
if ret < 0 {
|
|
return false, fmt.Errorf("failed to set text: %d", ret)
|
|
}
|
|
return ret == 0, nil
|
|
}
|
|
|
|
func (n *Native) ImgSetSrc(objName string, src string) (bool, error) {
|
|
objNameCStr := C.CString(objName)
|
|
defer C.free(unsafe.Pointer(objNameCStr))
|
|
|
|
srcCStr := C.CString(src)
|
|
defer C.free(unsafe.Pointer(srcCStr))
|
|
|
|
C.jetkvm_ui_set_image(objNameCStr, srcCStr)
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) DispSetRotation(rotation string) (bool, error) {
|
|
rotationInt, err := strconv.Atoi(rotation)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
nativeLogger.Info().Int("rotation", rotationInt).Msg("setting rotation")
|
|
// C.jetkvm_ui_set_rotation(C.u_int8_t(rotationInt))
|
|
return true, nil
|
|
}
|
|
|
|
func (n *Native) GetStreamQualityFactor() (float64, error) {
|
|
return 1.0, nil
|
|
}
|
|
|
|
func (n *Native) SetStreamQualityFactor(factor float64) error {
|
|
return nil
|
|
}
|
|
|
|
func (n *Native) GetEDID() (string, error) {
|
|
return "", nil
|
|
}
|
|
|
|
func (n *Native) SetEDID(edid string) error {
|
|
return nil
|
|
}
|