diff --git a/.gitignore b/.gitignore index 8c6e03892..d6cca4505 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ build profiles backend/cmd/cmd +backend/cmd/adj/ +.ropeproject # MacOS Files .DS_Store diff --git a/.gitmodules b/.gitmodules index d1a8618fc..a127c694b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ -[submodule "backend/cmd/JSON_ADE"] - path = backend/cmd/JSON_ADE - url = https://github.com/HyperloopUPV-H8/JSON_ADE.git +[submodule "backend/cmd/adj"] + path = backend/cmd/adj + url = https://github.com/HyperloopUPV-H8/adj.git branch = main diff --git a/backend/cmd/JSON_ADE b/backend/cmd/adj similarity index 100% rename from backend/cmd/JSON_ADE rename to backend/cmd/adj diff --git a/backend/cmd/config.toml b/backend/cmd/config.toml index 8a9f54fa1..1bff72f3f 100644 --- a/backend/cmd/config.toml +++ b/backend/cmd/config.toml @@ -10,8 +10,5 @@ programable_boards = "/uploadableBoards" connections = "/backend" files = "/" -[vehicle] -boardsList = ["VCU"] - [adj] -branch = "main" # Leave blank when using ADJ as a submodule +branch = "" # Leave blank when using ADJ as a submodule (like this: "") diff --git a/backend/cmd/testadj.py b/backend/cmd/testadj.py index 72ba3c160..82802cd34 100644 --- a/backend/cmd/testadj.py +++ b/backend/cmd/testadj.py @@ -115,7 +115,7 @@ def validate_json_folder(folder_path): print(f"Error al procesar el archivo {full_path}: {e}") -if os.path.exists('./JSON_ADE/') == False: - print("La carpeta JSON_ADE no existe") +if os.path.exists('./adj/') == False: + print("La carpeta ./adj/ no existe") if __name__ == "__main__": - validate_json_folder("./JSON_ADE/") + validate_json_folder("./adj/") diff --git a/backend/internal/adj/adj.go b/backend/internal/adj/adj.go index 7a6ba9ea3..7708aaa35 100644 --- a/backend/internal/adj/adj.go +++ b/backend/internal/adj/adj.go @@ -3,16 +3,13 @@ package adj import ( "encoding/json" "os" - "path" "github.com/HyperloopUPV-H8/h9-backend/internal/utils" - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" ) const ( - RepoUrl = "https://github.com/HyperloopUPV-H8/JSON_ADE.git" // URL of the ADJ repository - RepoPath = "./JSON_ADE/" // Path where the ADJ repository is cloned + RepoUrl = "https://github.com/HyperloopUPV-H8/adj.git" // URL of the ADJ repository + RepoPath = "./adj/" // Path where the ADJ repository is cloned ) func NewADJ(AdjBranch string) (ADJ, error) { @@ -90,249 +87,3 @@ func downloadADJ(AdjBranch string) (json.RawMessage, json.RawMessage, error) { return info, boardsList, nil } - -// WARNING: Doing tricks on it -func updateRepo(AdjBranch string) error { - var repo *git.Repository - var err error - - if AdjBranch == "" { - // Makes use of submodule - return nil - } else { - if _, err = os.Stat(RepoPath); os.IsNotExist(err) { - repo, err = git.PlainClone(RepoPath, false, &git.CloneOptions{ - URL: RepoUrl, - ReferenceName: plumbing.NewBranchReferenceName(AdjBranch), - SingleBranch: true, - Depth: 1, - }) - if err != nil { - return err - } - } else { - repo, err = git.PlainOpen(RepoPath) - if err != nil { - return err - } - } - - err = repo.Fetch(&git.FetchOptions{ - RemoteName: "origin", - Force: true, - }) - if err != nil && err != git.NoErrAlreadyUpToDate { - return err - } - - head, err := repo.Head() - if err != nil { - return err - } - - branch := head.Name().Short() - - println("actual branch is: ", branch) - - worktree, err := repo.Worktree() - if err != nil { - return err - } - - println(head.Name().Short(), AdjBranch) - - if branch != AdjBranch { - localBranchRef := plumbing.NewBranchReferenceName(AdjBranch) - _, err = repo.Reference(localBranchRef, false) - if err != nil { - remoteBranchRef := plumbing.NewRemoteReferenceName("origin", AdjBranch) - remoteRef, err2 := repo.Reference(remoteBranchRef, true) - if err2 != nil { - return err2 - } - - err = worktree.Checkout(&git.CheckoutOptions{ - Branch: localBranchRef, - Create: true, - Force: true, - Hash: remoteRef.Hash(), - }) - if err != nil { - println(err.Error()) - return err - } - } else { - err = worktree.Checkout(&git.CheckoutOptions{ - Branch: localBranchRef, - Force: true, - }) - } - } - - err = worktree.Pull(&git.PullOptions{ - RemoteName: "origin", - SingleBranch: true, - }) - if err != nil { - if err == git.NoErrAlreadyUpToDate { - return nil - } else { - return err - } - } - } - - return nil -} - -func getBoards(boardsList map[string]string) (map[string]Board, error) { - boards := make(map[string]Board, len(boardsList)) - for boardName, boardPath := range boardsList { - fullPath := path.Join(RepoPath, boardPath) - boardRaw, err := os.ReadFile(fullPath) - if err != nil { - return nil, err - } - - var boardJSON BoardJSON - if err = json.Unmarshal(boardRaw, &boardJSON); err != nil { - return nil, err - } - - measPathsFr := make([]string, 0) - for _, measPath := range boardJSON.MeasurementsPaths { - measPathsFr = append(measPathsFr, path.Join(RepoPath, "boards", boardName, measPath)) - } - boardJSON.MeasurementsPaths = measPathsFr - - packetPathsFr := make([]string, 0) - for _, packetPath := range boardJSON.PacketsPaths { - packetPathsFr = append(packetPathsFr, path.Join(RepoPath, "boards", boardName, packetPath)) - } - boardJSON.PacketsPaths = packetPathsFr - - board := Board{ - Name: boardName, - IP: boardJSON.IP, - } - board.Packets, err = getBoardPackets(boardJSON.PacketsPaths) - if err != nil { - return nil, err - } - - board.Measurements, err = getBoardMeasurements(boardJSON.MeasurementsPaths) - if err != nil { - return nil, err - } - board.LookUpMeasurements = make(map[string]Measurement, len(board.Measurements)) - - for _, measurement := range board.Measurements { - board.LookUpMeasurements[measurement.Id] = measurement - } - board.Structures = getBoardStructures(board) - - boards[boardName] = board - } - - return boards, nil -} - -func getBoardPackets(packetsPaths []string) ([]Packet, error) { - packets := make([]Packet, 0) - for _, packetPath := range packetsPaths { - if _, err := os.Stat(packetPath); os.IsNotExist(err) { - continue - } - - packetRaw, err := os.ReadFile(packetPath) - if err != nil { - return nil, err - } - - // Magic happens here - type PacketJSON struct { - Packet []Packet `json:"packets"` - } - - packetsJSON := PacketJSON{} - if err = json.Unmarshal(packetRaw, &packetsJSON); err != nil { - return nil, err - } - for _, packetTMP := range packetsJSON.Packet { - packets = append(packets, packetTMP) - } - } - - return packets, nil -} - -func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) { - measurements := make([]Measurement, 0) - - for _, measurementPath := range measurementsPaths { - if _, err := os.Stat(measurementPath); os.IsNotExist(err) { - continue - } - - measurementRaw, err := os.ReadFile(measurementPath) - if err != nil { - return nil, err - } - - // Absolutely doing tricks on it AGAIN - @msanlli - type MeasurementJSON struct { - Measurements []Measurement `json:"measurements"` - } - - measurementsJSON := MeasurementJSON{} - if err = json.Unmarshal(measurementRaw, &measurementsJSON); err != nil { - return nil, err - } - for _, measurementTMP := range measurementsJSON.Measurements { - measurements = append(measurements, measurementTMP) - } - } - - return measurements, nil -} - -func getBoardIds(boards map[string]string) (map[string]uint16, error) { - boardIds := make(map[string]uint16, len(boards)) - for boardName, boardPath := range boards { - fullPath := path.Join(RepoPath, boardPath) - boardRaw, err := os.ReadFile(fullPath) - if err != nil { - return nil, err - } - - var boardJSON BoardJSON - if err = json.Unmarshal(boardRaw, &boardJSON); err != nil { - return nil, err - } - - boardIds[boardName] = boardJSON.ID - } - - return boardIds, nil -} - -func getBoardStructures(board Board) []Structure { - structures := make([]Structure, len(board.Packets)) - for i, packet := range board.Packets { - structures[i] = Structure{ - Packet: packet, - Measurements: board.Measurements, - } - } - - return structures -} - -func getAddresses(boards map[string]Board) (map[string]string, error) { - addresses := make(map[string]string, len(boards)) - for boardName, board := range boards { - addresses[boardName] = board.IP - } - - return addresses, nil -} diff --git a/backend/internal/adj/boards.go b/backend/internal/adj/boards.go new file mode 100644 index 000000000..2ea61038e --- /dev/null +++ b/backend/internal/adj/boards.go @@ -0,0 +1,245 @@ +package adj + +import ( + "encoding/json" + "os" + "path" +) + +func getBoards(boardsList map[string]string) (map[string]Board, error) { + boards := make(map[string]Board, len(boardsList)) + for boardName, boardPath := range boardsList { + fullPath := path.Join(RepoPath, boardPath) + boardRaw, err := os.ReadFile(fullPath) + if err != nil { + return nil, err + } + + var boardJSON BoardJSON + if err = json.Unmarshal(boardRaw, &boardJSON); err != nil { + return nil, err + } + + measPathsFr := make([]string, 0) + for _, measPath := range boardJSON.MeasurementsPaths { + measPathsFr = append(measPathsFr, path.Join(RepoPath, "boards", boardName, measPath)) + } + boardJSON.MeasurementsPaths = measPathsFr + + packetPathsFr := make([]string, 0) + for _, packetPath := range boardJSON.PacketsPaths { + packetPathsFr = append(packetPathsFr, path.Join(RepoPath, "boards", boardName, packetPath)) + } + boardJSON.PacketsPaths = packetPathsFr + + board := Board{ + Name: boardName, + IP: boardJSON.IP, + } + + boardPackets, err := getBoardPackets(boardJSON.PacketsPaths) + if err != nil { + return nil, err + } + + board.Measurements, err = getBoardMeasurements(boardJSON.MeasurementsPaths) + if err != nil { + return nil, err + } + + board.LookUpMeasurements = make(map[string]Measurement, len(board.Measurements)) + for _, measurement := range board.Measurements { + board.LookUpMeasurements[measurement.Id] = measurement + } + + board.Packets = lookUpMeas(boardPackets, board.LookUpMeasurements) + + board.Structures = getBoardStructures(board) + + // DEBUG + for _, meas := range board.Measurements { + println(meas.SafeRange[0], ", ", meas.SafeRange[1]) + println(meas.WarningRange[0], ", ", meas.WarningRange[1]) + } + + boards[boardName] = board + } + + return boards, nil +} + +func lookUpMeas(packetsTMP []Packet, lookUpMeas map[string]Measurement) []Packet { + packetsFNL := make([]Packet, 0) + for _, packetTMP := range packetsTMP { + measFNL := make([]Measurement, 0) + for _, measId := range packetTMP.VariablesIds { + meas := lookUpMeas[measId] + measFNL = append(measFNL, meas) + } + + packetTMP.Variables = measFNL + packetsFNL = append(packetsFNL, packetTMP) + } + + return packetsFNL +} + +func getBoardPackets(packetsPaths []string) ([]Packet, error) { + packets := make([]Packet, 0) + + for _, packetPath := range packetsPaths { + if _, err := os.Stat(packetPath); os.IsNotExist(err) { + continue + } + + packetRaw, err := os.ReadFile(packetPath) + if err != nil { + return nil, err + } + + packet := make([]Packet, 0) + + if err = json.Unmarshal(packetRaw, &packet); err != nil { + return nil, err + } + + packets = append(packets, packet...) + } + + return packets, nil +} + +// Absolutely doing tricks on it AGAIN, AGAIN - @msanlli +func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) { + measurementsJSON := make([]Measurement, 0) + + for _, measurementPath := range measurementsPaths { + if _, err := os.Stat(measurementPath); os.IsNotExist(err) { + println("ADJ Error: Measurement file path not found") + continue + } + + measTMP := make([]Measurement, 0) + + measurementRaw, err := os.ReadFile(measurementPath) + if err != nil { + return nil, err + } + + if err = json.Unmarshal(measurementRaw, &measTMP); err != nil { + return nil, err + } + + measurementsJSON = append(measurementsJSON, measTMP...) + } + + measurements, err := measTranslate(measurementsJSON) + if err != nil { + return nil, err + } + + return measurements, nil +} + +func measTranslate(measurementsTMP []Measurement) ([]Measurement, error) { + measurements := make([]Measurement, 0) + + for _, measJSON := range measurementsTMP { + var err error + + measJSON.SafeRange, measJSON.WarningRange, err = getRanges(measJSON) + if err != nil { + return nil, err + } + + measurements = append(measurements, measJSON) + } + + return measurements, nil +} + +func getRanges(measTMP Measurement) ([]*float64, []*float64, error) { + safeRange := make([]*float64, 0) + warningRange := make([]*float64, 0) + + if measTMP.OutOfRange.Safe == nil && measTMP.OutOfRange.Warning == nil { + if measTMP.Below.Safe == nil && measTMP.Below.Warning == nil && measTMP.Above.Safe == nil && measTMP.Above.Warning == nil { + safeRange = append(safeRange, []*float64{nil, nil}...) + warningRange = append(warningRange, []*float64{nil, nil}...) + } else if measTMP.Below.Safe == nil { + safeRange = append(safeRange, []*float64{nil}...) + } else { + safeRange = append(safeRange, measTMP.Below.Safe) + } + + if measTMP.Above.Safe == nil { + safeRange = append(safeRange, []*float64{nil}...) + } else { + safeRange = append(safeRange, measTMP.Above.Safe) + } + + if measTMP.Below.Warning == nil { + warningRange = append(warningRange, []*float64{nil}...) + } else { + warningRange = append(warningRange, measTMP.Below.Warning) + } + + if measTMP.Above.Warning == nil { + warningRange = append(warningRange, []*float64{nil}...) + } else { + warningRange = append(warningRange, measTMP.Above.Warning) + } + } else if measTMP.OutOfRange.Safe == nil { + safeRange = append(safeRange, []*float64{nil, nil}...) + warningRange = append(warningRange, measTMP.OutOfRange.Warning...) + } else if measTMP.OutOfRange.Warning == nil { + safeRange = append(safeRange, measTMP.OutOfRange.Safe...) + warningRange = append(warningRange, []*float64{nil, nil}...) + } else { + safeRange = append(safeRange, measTMP.OutOfRange.Safe...) + warningRange = append(warningRange, measTMP.OutOfRange.Warning...) + } + + return safeRange, warningRange, nil +} + +func getBoardIds(boards map[string]string) (map[string]uint16, error) { + boardIds := make(map[string]uint16, len(boards)) + for boardName, boardPath := range boards { + fullPath := path.Join(RepoPath, boardPath) + boardRaw, err := os.ReadFile(fullPath) + if err != nil { + return nil, err + } + + var boardJSON BoardJSON + if err = json.Unmarshal(boardRaw, &boardJSON); err != nil { + return nil, err + } + + boardIds[boardName] = boardJSON.ID + } + + return boardIds, nil +} + +func getBoardStructures(board Board) []Structure { + structures := make([]Structure, len(board.Packets)) + for i, packet := range board.Packets { + structures[i] = Structure{ + Packet: packet, + Measurements: board.Measurements, + } + } + + return structures +} + +func getAddresses(boards map[string]Board) (map[string]string, error) { + addresses := make(map[string]string, len(boards)) + for boardName, board := range boards { + addresses[boardName] = board.IP + } + + return addresses, nil +} diff --git a/backend/internal/adj/git.go b/backend/internal/adj/git.go new file mode 100644 index 000000000..490955117 --- /dev/null +++ b/backend/internal/adj/git.go @@ -0,0 +1,98 @@ +package adj + +import ( + "os" + + "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" +) + +// WARNING: Doing tricks on it +func updateRepo(AdjBranch string) error { + var repo *git.Repository + var err error + + if AdjBranch == "" { + // Makes use of submodule + return nil + } else { + if _, err = os.Stat(RepoPath); os.IsNotExist(err) { + repo, err = git.PlainClone(RepoPath, false, &git.CloneOptions{ + URL: RepoUrl, + ReferenceName: plumbing.NewBranchReferenceName(AdjBranch), + SingleBranch: true, + Depth: 1, + }) + if err != nil { + return err + } + } else { + repo, err = git.PlainOpen(RepoPath) + if err != nil { + return err + } + } + + err = repo.Fetch(&git.FetchOptions{ + RemoteName: "origin", + Force: true, + }) + if err != nil && err != git.NoErrAlreadyUpToDate { + return err + } + + head, err := repo.Head() + if err != nil { + return err + } + + branch := head.Name().Short() + + worktree, err := repo.Worktree() + if err != nil { + return err + } + + if branch != AdjBranch { + localBranchRef := plumbing.NewBranchReferenceName(AdjBranch) + _, err = repo.Reference(localBranchRef, false) + if err != nil { + remoteBranchRef := plumbing.NewRemoteReferenceName("origin", AdjBranch) + remoteRef, err2 := repo.Reference(remoteBranchRef, true) + if err2 != nil { + return err2 + } + + err = worktree.Checkout(&git.CheckoutOptions{ + Branch: localBranchRef, + Create: true, + Force: true, + Hash: remoteRef.Hash(), + }) + if err != nil { + println(err.Error()) + return err + } + } else { + err = worktree.Checkout(&git.CheckoutOptions{ + Branch: localBranchRef, + Force: true, + }) + } + } + + err = worktree.Pull(&git.PullOptions{ + RemoteName: "origin", + SingleBranch: true, + }) + if err != nil { + if err == git.NoErrAlreadyUpToDate { + return nil + } else { + return err + } + } + } + + return nil +} diff --git a/backend/internal/adj/models.go b/backend/internal/adj/models.go index f0ad09738..5619833bf 100644 --- a/backend/internal/adj/models.go +++ b/backend/internal/adj/models.go @@ -40,21 +40,35 @@ type Board struct { } type Packet struct { - Id string `json:"id"` - Name string `json:"name"` - Type string `json:"type"` - Variables []Measurement `json:"variables"` + Id uint16 `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + Variables []Measurement + VariablesIds []string `json:"variables"` } type Measurement struct { - Id string `json:"id"` - Name string `json:"name"` - Type string `json:"type"` - PodUnits string `json:"podUnits"` - DisplayUnits string `json:"displayUnits"` - SafeRange []*float64 `json:"safeRange"` - WarningRange []*float64 `json:"warningRange"` - EnumValues []string `json:"enumValues"` + Id string `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + PodUnits string `json:"podUnits"` + DisplayUnits string `json:"displayUnits"` + EnumValues []string `json:"enumValues"` + SafeRange []*float64 + WarningRange []*float64 + Below BelowOrAbove `json:"below"` + Above BelowOrAbove `json:"above"` + OutOfRange OutOfRange `json:"out_of_range"` +} + +type BelowOrAbove struct { + Safe *float64 `json:"safe"` + Warning *float64 `json:"warning"` +} + +type OutOfRange struct { + Safe []*float64 `json:"safe"` + Warning []*float64 `json:"warning"` } type Structure struct { diff --git a/backend/internal/pod_data/measurement.go b/backend/internal/pod_data/measurement.go index b75247146..446b88611 100644 --- a/backend/internal/pod_data/measurement.go +++ b/backend/internal/pod_data/measurement.go @@ -11,11 +11,11 @@ import ( const EnumType = "enum" -func getMeasurements(packet adj.Packet, globalUnits map[string]utils.Operations) ([]Measurement, error) { +func getMeasurements(measurementsADJ []adj.Measurement, globalUnits map[string]utils.Operations) ([]Measurement, error) { measurements := make([]Measurement, 0) mErrors := common.NewErrorList() - for _, adjMeas := range packet.Variables { + for _, adjMeas := range measurementsADJ { meas, err := getMeasurement(adjMeas, globalUnits) if err != nil { mErrors.Add(err) @@ -32,34 +32,31 @@ func getMeasurements(packet adj.Packet, globalUnits map[string]utils.Operations) return measurements, nil } -func getMeasurement(adeMeas adj.Measurement, globalUnits map[string]utils.Operations) (Measurement, error) { +func getMeasurement(adjMeas adj.Measurement, globalUnits map[string]utils.Operations) (Measurement, error) { var tmp Measurement var err error - if isNumeric(adeMeas.Type) { - tmp, err = getNumericMeasurement(adeMeas, globalUnits) - } else if adeMeas.Type == "bool" { - tmp = getBooleanMeasurement(adeMeas) - } else if strings.HasPrefix(adeMeas.Type, "enum") { - tmp = getEnumMeasurement(adeMeas) + + if isNumeric(adjMeas.Type) { + tmp, err = getNumericMeasurement(adjMeas, globalUnits) + } else if adjMeas.Type == "bool" { + tmp = getBooleanMeasurement(adjMeas) + } else if strings.HasPrefix(adjMeas.Type, "enum") { + tmp = getEnumMeasurement(adjMeas) } else { - return nil, fmt.Errorf("type %s not recognized", adeMeas.Type) + return nil, fmt.Errorf("type %s not recognized", adjMeas.Type) } return tmp, err } -func getNumericMeasurement(adeMeas adj.Measurement, globalUnits map[string]utils.Operations) (NumericMeasurement, error) { +func getNumericMeasurement(adjMeas adj.Measurement, globalUnits map[string]utils.Operations) (NumericMeasurement, error) { measErrs := common.NewErrorList() - safeRange := adeMeas.SafeRange - - warningRange := adeMeas.WarningRange - - displayUnits, err := utils.ParseUnits(adeMeas.DisplayUnits, globalUnits) + displayUnits, err := utils.ParseUnits(adjMeas.DisplayUnits, globalUnits) if err != nil { measErrs.Add(err) } - podUnits, err := utils.ParseUnits(adeMeas.PodUnits, globalUnits) + podUnits, err := utils.ParseUnits(adjMeas.PodUnits, globalUnits) if err != nil { measErrs.Add(err) } @@ -69,31 +66,31 @@ func getNumericMeasurement(adeMeas adj.Measurement, globalUnits map[string]utils } return NumericMeasurement{ - Id: adeMeas.Id, - Name: adeMeas.Name, - Type: adeMeas.Type, + Id: adjMeas.Id, + Name: adjMeas.Name, + Type: adjMeas.Type, Units: displayUnits.Name, DisplayUnits: displayUnits, PodUnits: podUnits, - SafeRange: safeRange, - WarningRange: warningRange, + SafeRange: adjMeas.SafeRange, + WarningRange: adjMeas.WarningRange, }, nil } -func getEnumMeasurement(adeMeas adj.Measurement) EnumMeasurement { +func getEnumMeasurement(adjMeas adj.Measurement) EnumMeasurement { return EnumMeasurement{ - Id: adeMeas.Id, - Name: adeMeas.Name, + Id: adjMeas.Id, + Name: adjMeas.Name, Type: EnumType, - Options: adeMeas.EnumValues, + Options: adjMeas.EnumValues, } } -func getBooleanMeasurement(adeMeas adj.Measurement) BooleanMeasurement { +func getBooleanMeasurement(adjMeas adj.Measurement) BooleanMeasurement { return BooleanMeasurement{ - Id: adeMeas.Id, - Name: adeMeas.Name, - Type: adeMeas.Type, + Id: adjMeas.Id, + Name: adjMeas.Name, + Type: adjMeas.Type, } } diff --git a/backend/internal/pod_data/pod_data.go b/backend/internal/pod_data/pod_data.go index 156bc42b8..7cafa1411 100644 --- a/backend/internal/pod_data/pod_data.go +++ b/backend/internal/pod_data/pod_data.go @@ -1,8 +1,6 @@ package pod_data import ( - "strconv" - "github.com/HyperloopUPV-H8/h9-backend/internal/utils" "github.com/HyperloopUPV-H8/h9-backend/internal/adj" @@ -39,14 +37,17 @@ func getBoard(adjBoard adj.Board, globalUnits map[string]utils.Operations) (Boar packets := make([]Packet, 0) for _, adjPacket := range adjBoard.Packets { - packet, err := getPacket(adjPacket) // Black magic fuck + packet, err := getPacket(adjPacket) if err != nil { return Board{}, err } - for idx, packetVariable := range adjPacket.Variables { - adjPacket.Variables[idx] = adjBoard.LookUpMeasurements[packetVariable.Name] + + variablesADJ := make([]adj.Measurement, 0) + for _, packetVariable := range adjPacket.Variables { + packetVariable = adjBoard.LookUpMeasurements[packetVariable.Id] + variablesADJ = append(variablesADJ, packetVariable) } - packet.Measurements, err = getMeasurements(adjPacket, globalUnits) // TODO: Check if this is correct + packet.Measurements, err = getMeasurements(variablesADJ, globalUnits) packets = append(packets, packet) } @@ -56,13 +57,8 @@ func getBoard(adjBoard adj.Board, globalUnits map[string]utils.Operations) (Boar } func getPacket(packet adj.Packet) (Packet, error) { - id, err := strconv.ParseUint(packet.Id, 10, 16) - if err != nil { - return Packet{}, err - } - return Packet{ - Id: uint16(id), + Id: packet.Id, Name: packet.Name, Type: packet.Type, HexValue: "000000", diff --git a/backend/pkg/adj/adj.go b/backend/pkg/adj/adj.go index 52c02d2e1..9e57ecd3c 100644 --- a/backend/pkg/adj/adj.go +++ b/backend/pkg/adj/adj.go @@ -10,8 +10,8 @@ import ( ) const ( - RepoUrl = "https://github.com/HyperloopUPV-H8/JSON_ADE.git" // URL of the ADJ repository - RepoPath = "./JSON_ADE/" // Path where the ADJ repository is cloned + RepoUrl = "https://github.com/HyperloopUPV-H8/adj.git" // URL of the ADJ repository + RepoPath = "./adj/" // Path where the ADJ repository is cloned ) func NewADJ() (ADJ, error) { diff --git a/ethernet-view/src/components/OrdersContainer/Orders/BoardOrders/OrderForm/Fields/Field/validation.ts b/ethernet-view/src/components/OrdersContainer/Orders/BoardOrders/OrderForm/Fields/Field/validation.ts index aea50a06b..975d7e568 100644 --- a/ethernet-view/src/components/OrdersContainer/Orders/BoardOrders/OrderForm/Fields/Field/validation.ts +++ b/ethernet-view/src/components/OrdersContainer/Orders/BoardOrders/OrderForm/Fields/Field/validation.ts @@ -72,11 +72,13 @@ function stringIsNumber(valueStr: string, numberType: NumericType): boolean { } function checkUnsignedIntegerOverflow(value: number, bits: number): boolean { - return value >= 0 && value < 1 << bits; //FIXME: aƱadir unos + return value >= 0 && value <= Math.pow(2, bits) - 1; } function checkSignedIntegerOverflow(value: number, bits: number): boolean { - return value >= -1 << (bits - 1) && value < 1 << (bits - 1); + const min = -Math.pow(2, bits - 1); + const max = Math.pow(2, bits - 1) - 1; + return value >= min && value <= max; } function checkFloatOverflow(value: number): boolean {