4 Commits
Author SHA1 Message Date
esilva 6070620713 hammer a stupid fix 2026-09-08 15:48:44 +01:00
esilva 1ad9dd4ab7 IsConnected logic 2026-09-08 15:41:44 +01:00
esilva 56c7081e8f Merge pull request 'Added functions to check the session state' (#5) from bitfields-values into master
Reviewed-on: #5
2026-09-08 10:52:16 +01:00
esilva ddfcd31b27 Added functions to check the session state 2026-09-08 10:51:56 +01:00
3 changed files with 128 additions and 15 deletions
+117 -2
View File
@@ -20,7 +20,6 @@ const (
IRSDK_BROADCASTMSGNAME string = "IRSDK_BROADCASTMSG"
fileMapSize uint32 = 1164 * 1024
connTimeout int64 = 30
stConnected int = 1
)
const (
@@ -117,6 +116,22 @@ const (
csFocusAtDriver int = 0 // ctFocusAtDriver + car number...
)
// StatusField - START
const (
irsdk_stConnected = 0x01
)
func (i *IBT) SessionStatusConnected() bool {
return i.Headers.Status == irsdk_stConnected
}
// NOTE: move this away from here
// func (i *IBT) SessionTimedOut() bool {
// return sdk.lastValidData+connTimeout > time.Now().Unix()
// }
// StatusField - END
// Camera positions
type bitfieldValue struct {
Value int
@@ -248,7 +263,7 @@ func (i *IBT) AbsActive() bool {
// EngineWarnings - END
// SessionState const
// SessionState - START
const (
irsdk_StateInvalid = 0x00
irsdk_StateGetInCar = 0x01
@@ -259,6 +274,104 @@ const (
irsdk_StateCoolDown = 0x06
)
func (i *IBT) SessionStateInvalid() bool {
val, ok := i.Vars.Vars["SessionState"]
if !ok {
return true
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
return true
}
return bitfield == irsdk_StateInvalid
}
func (i *IBT) SessionStateGetInCar() bool {
val, ok := i.Vars.Vars["SessionState"]
if !ok {
log.Fatal("no SessionState")
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
log.Fatal("unable to get SessionState: " + err.Error())
}
return bitfield == irsdk_StateGetInCar
}
func (i *IBT) SessionStateWarmup() bool {
val, ok := i.Vars.Vars["SessionState"]
if !ok {
log.Fatal("no SessionState")
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
log.Fatal("unable to get SessionState: " + err.Error())
}
return bitfield == irsdk_StateWarmup
}
func (i *IBT) SessionStateParadeLaps() bool {
val, ok := i.Vars.Vars["SessionState"]
if !ok {
log.Fatal("no SessionState")
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
log.Fatal("unable to get SessionState: " + err.Error())
}
return bitfield == irsdk_StateParadeLaps
}
func (i *IBT) SessionStateRacing() bool {
val, ok := i.Vars.Vars["SessionState"]
if !ok {
log.Fatal("no SessionState")
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
log.Fatal("unable to get SessionState: " + err.Error())
}
return bitfield == irsdk_StateRacing
}
func (i *IBT) SessionStateCheckered() bool {
val, ok := i.Vars.Vars["SessionState"]
if !ok {
log.Fatal("no SessionState")
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
log.Fatal("unable to get SessionState: " + err.Error())
}
return bitfield == irsdk_StateCheckered
}
func (i *IBT) SessionStateCoolDown() bool {
val, ok := i.Vars.Vars["SessionState"]
if !ok {
log.Fatal("no SessionState")
}
bitfield, err := strconv.ParseInt(val.Value.(string), 0, 64)
if err != nil {
log.Fatal("unable to get SessionState: " + err.Error())
}
return bitfield == irsdk_StateCoolDown
}
func SessionStateToString(state int) string {
switch state {
case irsdk_StateInvalid:
@@ -280,6 +393,8 @@ func SessionStateToString(state int) string {
}
}
// SessionState - END
// TrkLoc const
const (
irsdk_NotInWorld = -1
+11 -8
View File
@@ -59,16 +59,19 @@ type IBT struct {
}
func (i *IBT) IsConnected() bool {
if i.Headers != nil {
if sessionStatusOK(int(i.Headers.Status)) {
return true
}
// if sessionStatusOK(int(i.Headers.Status)) && (sdk.lastValidData+connTimeout > time.Now().Unix()) {
// return true
// }
if i.Headers == nil {
return false
}
return false
if !i.SessionStatusConnected() {
return false
}
if i.SessionStateInvalid() {
return false
}
return true
}
func (i *IBT) exportYAML() error {
-5
View File
@@ -370,11 +370,6 @@ func parseSessionInfo(buf []byte, len int32) (*SessionInfoYAML, error) {
return &sessionInfo, nil
}
// sessionStatusOK will tell us if we are connected to the live data
func sessionStatusOK(status int) bool {
return (status & stConnected) > 0
}
// ToString will return a readable string of the struct
func (s *SessionInfoYAML) ToString() string {
stringified, _ := json.MarshalIndent(s, "", " ")