main.go 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. package main
  2. import (
  3. "os"
  4. "fmt"
  5. "log"
  6. "io/ioutil"
  7. "strconv"
  8. "strings"
  9. "runtime"
  10. "path/filepath"
  11. "os/exec"
  12. //"encoding/json"
  13. gotime "time"
  14. "github.com/veandco/go-sdl2/sdl"
  15. "github.com/cuu/gogame"
  16. "github.com/cuu/gogame/display"
  17. "github.com/cuu/gogame/event"
  18. // "github.com/cuu/gogame/color"
  19. "github.com/cuu/gogame/font"
  20. //"github.com/cuu/gogame/time"
  21. "github.com/clockworkpi/LauncherGoDev/sysgo"
  22. "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
  23. )
  24. var (
  25. flash_led1_counter = 0
  26. last_brt = -1
  27. passout_time_stage = 0
  28. led1_proc_file = "/proc/driver/led1"
  29. everytime_keydown = gotime.Now()
  30. )
  31. // flash the Led1 on the GS back
  32. func FlashLed1(main_screen *UI.MainScreen) {
  33. for {
  34. if UI.FileExists(led1_proc_file) {
  35. if main_screen.Closed == false {
  36. if flash_led1_counter > 0 {
  37. d := []byte(fmt.Sprintf("%d",0))
  38. err := ioutil.WriteFile(led1_proc_file, d, 0644) // turn off led1
  39. if err != nil {
  40. fmt.Println(err)
  41. }
  42. flash_led1_counter = 0
  43. }
  44. } else {
  45. flash_led1_counter +=1
  46. if flash_led1_counter == 3 {
  47. d := []byte(fmt.Sprintf("%d",1))
  48. err := ioutil.WriteFile(led1_proc_file, d, 0644)
  49. if err != nil {
  50. fmt.Println(err)
  51. }
  52. }
  53. if flash_led1_counter == 5 {
  54. d := []byte(fmt.Sprintf("%d",0))
  55. err := ioutil.WriteFile(led1_proc_file, d, 0644)
  56. if err != nil {
  57. fmt.Println(err)
  58. }
  59. }
  60. if flash_led1_counter == 11 {
  61. flash_led1_counter = 1
  62. }
  63. }
  64. }
  65. gotime.Sleep(200 * gotime.Millisecond)
  66. }
  67. }
  68. //happens everytime when KeyDown occurs
  69. func RestoreLastBackLightBrightness(main_screen *UI.MainScreen) bool {
  70. passout_time_stage = 0
  71. main_screen.TitleBar.InLowBackLight = -1
  72. main_screen.Closed = false
  73. if last_brt == -1 {
  74. return true
  75. }
  76. if UI.FileExists(sysgo.BackLight) {
  77. lines,err := UI.ReadLines(sysgo.BackLight)
  78. if err == nil {
  79. brt,err2 := strconv.Atoi(strings.Trim(lines[0],"\r\n "))
  80. if err2 == nil {
  81. if brt < last_brt {
  82. d := []byte(fmt.Sprintf("%d",last_brt))
  83. ioutil.WriteFile(sysgo.BackLight,d,0644)
  84. last_brt = -1
  85. }
  86. }
  87. }else {
  88. fmt.Println(err)
  89. }
  90. }else {
  91. }
  92. if UI.FileExists(led1_proc_file) {
  93. d := []byte(fmt.Sprintf("%d",0))
  94. err := ioutil.WriteFile(led1_proc_file, d, 0644)
  95. if err != nil {
  96. fmt.Println(err)
  97. }
  98. }
  99. //Stop CounterScreen here
  100. if main_screen.CounterScreen.Counting == true {
  101. main_screen.CounterScreen.StopCounter()
  102. main_screen.Draw()
  103. main_screen.SwapAndShow()
  104. return false
  105. }
  106. return true
  107. }
  108. //power stuff dealer
  109. func InspectionTeam(main_screen *UI.MainScreen) {
  110. for {
  111. cur_time := gotime.Now()
  112. elapsed := cur_time.Sub(everytime_keydown)
  113. time1 := sysgo.PowerLevels[sysgo.CurPowerLevel].Dim
  114. time2 := sysgo.PowerLevels[sysgo.CurPowerLevel].Close
  115. time3 := sysgo.PowerLevels[sysgo.CurPowerLevel].PowerOff
  116. if elapsed > gotime.Duration(time1) *gotime.Second && passout_time_stage == 0 {
  117. fmt.Println("timeout, dim screen ",elapsed)
  118. if main_screen.TitleBar.InLowBackLight >= 0 {
  119. return
  120. }
  121. if UI.FileExists(sysgo.BackLight) {
  122. lines,err := UI.ReadLines(sysgo.BackLight)
  123. if err == nil {
  124. brt,err2 := strconv.Atoi(strings.Trim(lines[0],"\r\n "))
  125. if err2 == nil {
  126. if brt > 0 {
  127. if last_brt < 0 {
  128. last_brt = brt
  129. }
  130. d := []byte(fmt.Sprintf("%d",1)) // lowest backlight
  131. ioutil.WriteFile(sysgo.BackLight,d,0644)
  132. }
  133. }
  134. }
  135. }
  136. main_screen.TitleBar.InLowBackLight = 0
  137. if time2 != 0 {
  138. passout_time_stage = 1 // next
  139. }
  140. everytime_keydown = cur_time
  141. }else if elapsed > gotime.Duration(time2) *gotime.Second && passout_time_stage == 1 {
  142. fmt.Println("timeout, close screen ", elapsed)
  143. if main_screen.Closed == true {
  144. return
  145. }
  146. if UI.FileExists(sysgo.BackLight) {
  147. d := []byte(fmt.Sprintf("%d",0))
  148. ioutil.WriteFile(sysgo.BackLight,d,0644)
  149. }
  150. main_screen.TitleBar.InLowBackLight = 0
  151. main_screen.Closed = true
  152. if time3 != 0 {
  153. passout_time_stage = 2 // next
  154. }
  155. everytime_keydown = cur_time
  156. }else if elapsed > gotime.Duration(time3) * gotime.Second && passout_time_stage == 2{
  157. fmt.Println("Power Off counting down")
  158. if UI.FileExists(sysgo.BackLight) { //hdmi does not have BackLight dev node
  159. d := []byte(fmt.Sprintf("%d",last_brt))
  160. ioutil.WriteFile(sysgo.BackLight,d,0644)
  161. main_screen.CounterScreen.Draw()
  162. main_screen.CounterScreen.SwapAndShow()
  163. main_screen.CounterScreen.StartCounter()
  164. }
  165. main_screen.TitleBar.InLowBackLight = 0
  166. passout_time_stage = 4
  167. }
  168. gotime.Sleep(gotime.Duration(UI.DT) * gotime.Millisecond)
  169. }
  170. }
  171. func PreparationInAdv(){
  172. if strings.Contains(runtime.GOARCH,"arm") == false {
  173. return
  174. }
  175. if UI.FileExists("sysgo/.powerlevel") == false {
  176. UI.System("touch sysgo/.powerlevel")
  177. UI.System("sudo iw wlan0 set power_save off >/dev/null")
  178. }else{
  179. b, err := ioutil.ReadFile("sysgo/.powerlevel")
  180. if err != nil {
  181. log.Fatal(err)
  182. }
  183. pwl := strings.Trim(string(b),"\r\n ")
  184. if pwl != ""{
  185. sysgo.CurPowerLevel = pwl
  186. if pwl == "supersaving" {
  187. UI.System("sudo iw wlan0 set power_save on >/dev/null")
  188. }else{
  189. UI.System("sudo iw wlan0 set power_save off >/dev/null")
  190. }
  191. }else {
  192. UI.System("sudo iw wlan0 set power_save off >/dev/null")
  193. }
  194. }
  195. }
  196. func run() int {
  197. display.Init()
  198. font.Init()
  199. screen := display.SetMode(int32(UI.Width),int32(UI.Height),0,32)
  200. UI.Init()
  201. UI.MyIconPool.Init()
  202. PreparationInAdv()
  203. main_screen := UI.NewMainScreen()
  204. main_screen.HWND = screen
  205. main_screen.Init()
  206. title_bar := UI.NewTitleBar()
  207. foot_bar := UI.NewFootBar()
  208. title_bar.Init(main_screen)
  209. foot_bar.Init(main_screen)
  210. main_screen.TitleBar = title_bar
  211. main_screen.FootBar = foot_bar
  212. ReadTheDirIntoPages(main_screen,"Menu",0,nil)
  213. ReadTheDirIntoPages(main_screen,"/home/cpi/apps/Menu",1,main_screen.Pages[len(main_screen.Pages)-1])
  214. ReunionPagesIcons(main_screen)
  215. main_screen.FartherPages()
  216. main_screen.Draw()
  217. main_screen.SwapAndShow()
  218. UI.SwapAndShow()
  219. //fmt.Println(main_screen)
  220. event.AllocEvents(5)
  221. event.AddCustomEvent(UI.RUNEVT)
  222. event.AddCustomEvent(UI.RUNSH)
  223. event.AddCustomEvent(UI.RUNSYS)
  224. event.AddCustomEvent(UI.RESTARTUI)
  225. event.AddCustomEvent(UI.POWEROPT)
  226. go FlashLed1(main_screen)
  227. go InspectionTeam(main_screen)
  228. go main_screen.TitleBar.RoundRobinCheck()
  229. running := true
  230. for running {
  231. ev := event.Wait()
  232. if ev.Type == event.QUIT {
  233. running = false
  234. break
  235. }
  236. if ev.Type == event.USEREVENT {
  237. fmt.Println("UserEvent: ",ev.Data["Msg"])
  238. switch ev.Code {
  239. case UI.RUNEVT:
  240. main_screen.OnExitCb()
  241. gogame.Quit()
  242. fmt.Println("RUNEVT")
  243. exec_app_cmd := "cd " + filepath.Dir(ev.Data["Msg"])+";"
  244. exec_app_cmd += ev.Data["Msg"]
  245. exec_app_cmd +="; sync & cd "+UI.GetExePath()+"; "+os.Args[0]+";"
  246. fmt.Println(exec_app_cmd)
  247. cmd := exec.Command("/bin/sh","-c",exec_app_cmd)
  248. err := cmd.Start()
  249. if err != nil {
  250. fmt.Println(err)
  251. }
  252. err = cmd.Process.Release()
  253. if err != nil {
  254. fmt.Println(err)
  255. }
  256. os.Exit(0)
  257. case UI.RUNSYS:
  258. main_screen.OnExitCb()
  259. gogame.Quit()
  260. exec_app_cmd := ev.Data["Msg"]
  261. cmd := exec.Command("/bin/sh","-c",exec_app_cmd)
  262. err := cmd.Start()
  263. if err != nil {
  264. fmt.Println(err)
  265. }
  266. err = cmd.Process.Release()
  267. if err != nil {
  268. fmt.Println(err)
  269. }
  270. os.Exit(0)
  271. case UI.RUNSH:
  272. main_screen.OnExitCb()
  273. gogame.Quit()
  274. fmt.Println("RUNSH")
  275. exec_app_cmd := ev.Data["Msg"]+";"
  276. fmt.Println(exec_app_cmd)
  277. cmd := exec.Command("/bin/sh","-c",exec_app_cmd)
  278. err := cmd.Start()
  279. if err != nil {
  280. fmt.Println(err)
  281. }
  282. err = cmd.Process.Release()
  283. if err != nil {
  284. fmt.Println(err)
  285. }
  286. os.Exit(0)
  287. case UI.RESTARTUI:
  288. main_screen.OnExitCb()
  289. gogame.Quit()
  290. exec_app_cmd :=" sync & cd "+UI.GetExePath()+"; "+os.Args[0]+";"
  291. fmt.Println(exec_app_cmd)
  292. cmd := exec.Command("/bin/sh","-c",exec_app_cmd)
  293. err := cmd.Start()
  294. if err != nil {
  295. fmt.Println(err)
  296. }
  297. err = cmd.Process.Release()
  298. if err != nil {
  299. fmt.Println(err)
  300. }
  301. os.Exit(0)
  302. case UI.POWEROPT:
  303. everytime_keydown = gotime.Now()
  304. }
  305. }
  306. if ev.Type == event.KEYDOWN {
  307. everytime_keydown = gotime.Now()
  308. if RestoreLastBackLightBrightness(main_screen) == false {
  309. continue
  310. }
  311. if ev.Data["Key"] == "Q" {
  312. main_screen.OnExitCb()
  313. return 0
  314. }else if ev.Data["Key"] == "P" {
  315. event.Post(UI.RUNEVT,"GODEBUG=cgocheck=0 sucks") // just id and string, simplify the stuff
  316. }else {
  317. main_screen.KeyDown(ev)
  318. }
  319. }
  320. }
  321. return 0
  322. }
  323. func main() {
  324. var exitcode int
  325. os.Setenv("SDL_VIDEO_CENTERED","1")
  326. sdl.Main(func() {
  327. exitcode = run()
  328. })
  329. os.Exit(exitcode)
  330. }