Skip to content

Commit

Permalink
Updated generation of MX_Device.h (#41)
Browse files Browse the repository at this point in the history
* Updated generation of MX_Device.h

- Added MX_Device version
- Added USB device handle
- Peripherals and configurations are listed in alphabetical order
- Changed header guard from __MX_DEVICE_H to MX_DEVICE_H__

* Renamed folder for generated MX_Device.h (from drv_cfg to MX_Device)
  • Loading branch information
DavidLesnjak authored Mar 22, 2024
1 parent 660fe34 commit 9a79318
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 15 deletions.
101 changes: 88 additions & 13 deletions internal/stm32CubeMX/mxDevice.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"path"
"path/filepath"
"regexp"
"sort"
"strconv"
"strings"
"time"
Expand Down Expand Up @@ -56,7 +57,7 @@ func ReadContexts(iocFile string, params cbuild.ParamsType) error {

var cfgPath string
if len(contexts) == 0 {
cfgPath = path.Join("drv_cfg", params.Subsystem[0].SubsystemIdx.Project)
cfgPath = path.Join("MX_Device", params.Subsystem[0].SubsystemIdx.Project)
err := writeMXdeviceH(contextMap, workDir, mainFolder, mspName, cfgPath, "", params)
if err != nil {
return err
Expand Down Expand Up @@ -95,11 +96,11 @@ func ReadContexts(iocFile string, params cbuild.ParamsType) error {
for _, subsystem := range params.Subsystem {
if subsystem.CoreName == coreName {
if len(subsystem.TrustZone) == 0 {
cfgPath = path.Join("drv_cfg", subsystem.SubsystemIdx.Project)
cfgPath = path.Join("MX_Device", subsystem.SubsystemIdx.Project)
break
}
if subsystem.TrustZone == projectPart {
cfgPath = path.Join("drv_cfg", subsystem.SubsystemIdx.Project)
cfgPath = path.Join("MX_Device", subsystem.SubsystemIdx.Project)
break
}
}
Expand Down Expand Up @@ -181,26 +182,32 @@ func writeMXdeviceH(contextMap map[string]map[string]string, workDir string, mai
if err != nil {
return err
}

peripherals, err := getPeripherals(contextMap, context)
if err != nil {
return err
}
sort.Strings(peripherals)
for _, peripheral := range peripherals {
vmode := getVirtualMode(contextMap, peripheral)
i2cInfo, err := getI2cInfo(fMain, peripheral)
if err != nil {
return err
}
usbdHandle, err := getUSBDHandle(fMain, peripheral)
if err != nil {
return err
}
pins, err := getPins(contextMap, fMsp, peripheral)
if err != nil {
return err
}
err = mxDeviceWritePeripheralCfg(out, peripheral, vmode, i2cInfo, pins)
err = mxDeviceWritePeripheralCfg(out, peripheral, vmode, i2cInfo, usbdHandle, pins)
if err != nil {
return err
}
}
_, err = out.WriteString("\n#endif /* __MX_DEVICE_H */\n")
_, err = out.WriteString("\n#endif /* MX_DEVICE_H__ */\n")
if err != nil {
return err
}
Expand Down Expand Up @@ -348,7 +355,9 @@ func getPins(contextMap map[string]map[string]string, fMsp *os.File, peripheral
if err != nil {
return nil, err
}
pinsInfo[name] = info
if info.port != "" {
pinsInfo[name] = info
}
}
return pinsInfo, nil
}
Expand Down Expand Up @@ -411,6 +420,44 @@ func getI2cInfo(fMain *os.File, peripheral string) (map[string]string, error) {
return info, nil
}

// Get USB Device Handle
func getUSBDHandle(fMain *os.File, peripheral string) (string, error) {
if strings.HasPrefix(peripheral, "USB") && !strings.Contains(peripheral, "HOST") {
_, err := fMain.Seek(0, 0)
if err != nil {
return "", err
}

mainScan := bufio.NewScanner(fMain)
mainScan.Split(bufio.ScanLines)
for mainScan.Scan() {
line := mainScan.Text()
line = strings.TrimSpace(line)

if strings.HasPrefix(line, "PCD_HandleTypeDef") {
line = strings.TrimSuffix(line, ";")
lineSplit := strings.Split(line, " ")
if len(lineSplit) < 2 {
continue
}
handle := lineSplit[1]

index := getDigitAtEnd(peripheral)
if index != "" {
if getDigitAtEnd(handle) != index {
continue
}
}
if strings.Contains(peripheral, "_HS") && !strings.Contains(handle, "_HS") {
continue
}
return handle, nil
}
}
}
return "", nil
}

func getPinConfiguration(fMsp *os.File, peripheral string, pin string, label string) (PinDefinition, error) {
var pinInfo PinDefinition

Expand Down Expand Up @@ -516,14 +563,20 @@ func mxDeviceWriteHeader(out *bufio.Writer, fName string) error {
if _, err = out.WriteString(" ******************************************************************************/\n\n"); err != nil {
return err
}
if _, err = out.WriteString("#ifndef __MX_DEVICE_H\n"); err != nil {
if _, err = out.WriteString("#ifndef MX_DEVICE_H__\n"); err != nil {
return err
}
if _, err = out.WriteString("#define MX_DEVICE_H__\n\n"); err != nil {
return err
}
_, err = out.WriteString("#define __MX_DEVICE_H\n\n")
if _, err = out.WriteString("/* MX_Device.h version */\n"); err != nil {
return err
}
_, err = out.WriteString("#define MX_DEVICE_VERSION 0x01000000\n\n")
return err
}

func mxDeviceWritePeripheralCfg(out *bufio.Writer, peripheral string, vmode string, i2cInfo map[string]string, pins map[string]PinDefinition) error {
func mxDeviceWritePeripheralCfg(out *bufio.Writer, peripheral string, vmode string, i2cInfo map[string]string, usbdHandle string, pins map[string]PinDefinition) error {
var err error

str := "\n/*------------------------------ " + peripheral
Expand All @@ -537,7 +590,7 @@ func mxDeviceWritePeripheralCfg(out *bufio.Writer, peripheral string, vmode stri
if err = writeDefine(out, peripheral, "1\n"); err != nil {
return err
}
if i2cInfo != nil {
if len(i2cInfo) > 0 {
if _, err = out.WriteString("/* Filter Settings */\n"); err != nil {
return err
}
Expand All @@ -550,6 +603,17 @@ func mxDeviceWritePeripheralCfg(out *bufio.Writer, peripheral string, vmode stri
return err
}
}
if usbdHandle != "" {
if _, err = out.WriteString("/* Handle */\n"); err != nil {
return err
}
if err = writeDefine(out, peripheral+"_HANDLE", usbdHandle); err != nil {
return err
}
if _, err = out.WriteString("\n"); err != nil {
return err
}
}
if vmode != "" {
if _, err = out.WriteString("/* Virtual mode */\n"); err != nil {
return err
Expand All @@ -560,12 +624,23 @@ func mxDeviceWritePeripheralCfg(out *bufio.Writer, peripheral string, vmode stri
if err = writeDefine(out, peripheral+"_"+vmode, "1"); err != nil {
return err
}
if _, err = out.WriteString("\n"); err != nil {
return err
}
}
if len(pins) != 0 {
if _, err = out.WriteString("/* Pins */\n"); err != nil {
return err
}
for pin, pinDef := range pins {

var pinNames []string
for pin := range pins {
pinNames = append(pinNames, pin)
}
sort.Strings(pinNames)
for pinName := range pinNames {
pin := pinNames[pinName]
pinDef := pins[pin]
if _, err = out.WriteString("\n/* " + pin + " */\n"); err != nil {
return err
}
Expand Down Expand Up @@ -607,8 +682,8 @@ func writeDefine(out *bufio.Writer, name string, value string) error {
value = strings.ReplaceAll(value, ch, "_")
}
name = "MX_" + name
if len(name) < 39 {
name += strings.Repeat(" ", 39-len(name))
if len(name) < 40 {
name += strings.Repeat(" ", 40-len(name))
}
_, err := out.WriteString("#define " + name + value + "\n")
return err
Expand Down
2 changes: 1 addition & 1 deletion internal/stm32CubeMX/mxDevice_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ func Test_mxDeviceWritePeripheralCfg(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
tt.args.out = bufio.NewWriter(&b)

if err := mxDeviceWritePeripheralCfg(tt.args.out, tt.args.peripheral, tt.args.vmode, tt.args.i2cInfo, tt.args.pins); (err != nil) != tt.wantErr {
if err := mxDeviceWritePeripheralCfg(tt.args.out, tt.args.peripheral, tt.args.vmode, tt.args.i2cInfo, "", tt.args.pins); (err != nil) != tt.wantErr {
t.Errorf("mxDeviceWritePeripheralCfg() error = %v, wantErr %v", err, tt.wantErr)
}
tt.args.out.Flush()
Expand Down
2 changes: 1 addition & 1 deletion internal/stm32CubeMX/stm32CubeMX.go
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ func WriteCgenYmlSub(outPath string, mxproject MxprojectType, subsystem *cbuild.
cgen.GeneratorImport.AddPath = append(cgen.GeneratorImport.AddPath, headerPath)
}

cfgPath := path.Join("drv_cfg", subsystem.SubsystemIdx.Project)
cfgPath := path.Join("MX_Device", subsystem.SubsystemIdx.Project)
cfgPath, _ = utils.ConvertFilename(outPath, cfgPath, "")
cgen.GeneratorImport.AddPath = append(cgen.GeneratorImport.AddPath, cfgPath)

Expand Down

0 comments on commit 9a79318

Please sign in to comment.