main.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package main
  2. import (
  3. "os"
  4. "fmt"
  5. gotime "time"
  6. "github.com/veandco/go-sdl2/sdl"
  7. "github.com/cuu/gogame/display"
  8. "github.com/cuu/gogame/event"
  9. // "github.com/cuu/gogame/color"
  10. "github.com/cuu/gogame/font"
  11. "github.com/cuu/gogame/time"
  12. "github.com/cuu/LauncherGoDev/sysgo"
  13. "github.com/cuu/LauncherGoDev/sysgo/UI"
  14. )
  15. var (
  16. flash_led1_counter = 0
  17. last_brt = 0
  18. passout_time_stage = 0
  19. led1_proc_file = "/proc/driver/led1"
  20. everytime_keydown = gotime.Now()
  21. )
  22. // flash the Led1 on the GS back
  23. func FlashLed1(main_screen *UI.MainScreen) {
  24. for {
  25. if UI.FileExists(led1_proc_file) {
  26. if main_screen.Closed == false {
  27. if flash_led1_counter > 0 {
  28. d := []byte(fmt.Sprintf("%d",0))
  29. err := ioutil.WriteFile(led1_proc_file, d, 0644) // turn off led1
  30. if err != nil {
  31. fmt.Println(err)
  32. }
  33. flash_led1_counter = 0
  34. }
  35. } else {
  36. flash_led1_counter +=1
  37. if flash_led1_counter == 3 {
  38. d := []byte(fmt.Sprintf("%d",1))
  39. err := ioutil.WriteFile(led1_proc_file, d, 0644)
  40. if err != nil {
  41. fmt.Println(err)
  42. }
  43. }
  44. if flash_led1_counter == 5 {
  45. d := []byte(fmt.Sprintf("%d",0))
  46. err := ioutil.WriteFile(led1_proc_file, d, 0644)
  47. if err != nil {
  48. fmt.Println(err)
  49. }
  50. }
  51. if flash_led1_counter == 11 {
  52. flash_led1_counter = 1
  53. }
  54. }
  55. }
  56. gotime.Sleep(200 * gotime.Millisecond)
  57. }
  58. }
  59. //happens everytime when KeyDown occurs
  60. func RestoreLastBackLightBrightness(main_screen *UI.MainScreen) bool {
  61. passout_time_stage = 0
  62. main_screen.TitleBar.InLowBackLight = -1
  63. main_screen.Closed = false
  64. if last_brt == -1 {
  65. return true
  66. }
  67. if UI.FileExists(sysgo.BackLight) {
  68. lines,err := UI.ReadLines(sysgo.BackLight)
  69. if err == nil {
  70. brt,err2 := strconv.Atoi(strings.Trim(lines[0],"\r\n "))
  71. if err2 == nil {
  72. if brt < last_brt {
  73. d := []byte(fmt.Sprintf("%d",last_brt))
  74. ioutil.WriteFile(sysgo.BackLight,d,0644)
  75. last_brt = -1
  76. }
  77. }
  78. }else {
  79. fmt.Println(err)
  80. }
  81. }else {
  82. }
  83. if UI.FileExists(led1_proc_file) {
  84. d := []byte(fmt.Sprintf("%d",0))
  85. err := ioutil.WriteFile(led1_proc_file, d, 0644)
  86. if err != nil {
  87. fmt.Println(err)
  88. }
  89. }
  90. //Stop CounterScreen here
  91. if main_screen.CounterScreen.Counting == true {
  92. main_screen.CounterScreen.StopCounter()
  93. main_screen.Draw()
  94. main_screen.SwapAndShow()
  95. return false
  96. }
  97. return true
  98. }
  99. //power stuff dealer
  100. func InspectionTeam(main_screen *UI.MainScreen) {
  101. for {
  102. cur_time := gotime.Now()
  103. elapsed := cur_time.Sub(everytime_keydown)
  104. time1 := sysgo.PowerLevels[sysgo.CurPowerLevel].Dim
  105. time2 := sysgo.PowerLevels[sysgo.CurPowerLevel].Close
  106. time3 := sysgo.PowerLevels[sysgo.CurPowerLevel].PowerOff
  107. if elapsed > gotime.Duration(time1) *gotime.Millisecond && passout_time_stage == 0 {
  108. fmt.Println("timeout, dim screen ",elapsed)
  109. if UI.FileExists(sysgo.BackLight) {
  110. lines,err := UI.ReadLines(sysgo.BackLight)
  111. if err == nil {
  112. brt,err2 := strconv.Atoi(strings.Trim(lines[0],"\r\n "))
  113. if err2 == nil {
  114. if brt > 0 {
  115. if last_brt < 0 {
  116. last_brt = brt
  117. }
  118. d := []byte(fmt.Sprintf("%d",1))
  119. ioutil.WriteFile(sysgo.BackLight,d,0644)
  120. }
  121. }
  122. }
  123. }
  124. main_screen.TitleBar.InLowBackLight = 0
  125. if time2 != 0 {
  126. passout_time_stage = 1 // next
  127. }
  128. everytime_keydown = cur_time
  129. }else if elapsed > gotime.Duration(time2) *gotime.Millisecond && passout_time_stage == 1 {
  130. fmt.Println("timeout, close screen ", elapsed)
  131. if UI.FileExists(sysgo.BackLight) {
  132. d := []byte(fmt.Sprintf("%d",0))
  133. ioutil.WriteFile(sysgo.BackLight,d,0644)
  134. }
  135. main_screen.TitleBar.InLowBackLight = 0
  136. main_screen.Closed = true
  137. if time3 != 0 {
  138. passout_time_stage = 2 // next
  139. }
  140. everytime_keydown = cur_time
  141. }else if elapsed > gotime.Duration(time3) * gotime.Millisecond && passout_time_stage == 2{
  142. fmt.Println("Power Off counting down")
  143. main_screen.CounterScreen.Draw()
  144. main_screen.CounterScreen.SwapAndShow()
  145. main_screen.CounterScreen.StartCounter()
  146. if UI.FileExists(sysgo.BackLight) {
  147. d := []byte(fmt.Sprintf("%d",last_brt))
  148. ioutil.WriteFile(sysgo.BackLight,d,0644)
  149. }
  150. main_screen.TitleBar.InLowBackLight = 0
  151. passout_time_stage = 4
  152. }
  153. gotime.Sleep(UI.DT * gotime.Millisecond)
  154. }
  155. }
  156. func run() int {
  157. display.Init()
  158. font.Init()
  159. screen := display.SetMode(int32(UI.Width),int32(UI.Height),0,32)
  160. UI.Init()
  161. UI.MyIconPool.Init()
  162. main_screen := UI.NewMainScreen()
  163. main_screen.HWND = screen
  164. main_screen.Init()
  165. title_bar := UI.NewTitleBar()
  166. foot_bar := UI.NewFootBar()
  167. title_bar.Init(main_screen)
  168. foot_bar.Init(main_screen)
  169. main_screen.TitleBar = title_bar
  170. main_screen.FootBar = foot_bar
  171. main_screen.ReadTheDirIntoPages("Menu",0,nil)
  172. main_screen.FartherPages()
  173. main_screen.Draw()
  174. main_screen.SwapAndShow()
  175. UI.SwapAndShow()
  176. //fmt.Println(main_screen)
  177. event.AddCustomEvent(UI.RUNEVT)
  178. go FlashLed1(main_screen)
  179. go InspectionTeam(main_screen)
  180. running := true
  181. for running {
  182. ev := event.Wait()
  183. if ev.Type == event.QUIT {
  184. running = false
  185. break
  186. }
  187. if ev.Type == event.USEREVENT {
  188. fmt.Println("UserEvent: ",ev.Data["Msg"])
  189. }
  190. if ev.Type == event.KEYDOWN {
  191. everytime_keydown = gotime.Now()
  192. if RestoreLastBackLightBrightness(main_screen) == false {
  193. return
  194. }
  195. if ev.Data["Key"] == "Q" {
  196. main_screen.OnExitCb()
  197. return 0
  198. }else if ev.Data["Key"] == "P" {
  199. event.Post(UI.RUNEVT,"GODEBUG=cgocheck=0 sucks") // just id and string, simplify the stuff
  200. }else {
  201. main_screen.KeyDown(ev)
  202. }
  203. }
  204. }
  205. return 0
  206. }
  207. func main() {
  208. var exitcode int
  209. os.Setenv("SDL_VIDEO_CENTERED","1")
  210. sdl.Main(func() {
  211. exitcode = run()
  212. })
  213. os.Exit(exitcode)
  214. }