private string GenerateApiDriver(FunctionData data, uint devAddr) { StringBuilder sb = new StringBuilder("// This is an automatically generated file.\n"); sb.Append("// Do not change unless you know exactly what you are doing.\n"); sb.AppendFormat( "// Device Driver for API Call: {0} on Address {1}\n\n", data.GetFinalName(), devAddr.ToHexString() ); sb.AppendFormat("public internal {1} {0}(", data.GetFinalName(), HLBaseTypeNames.s_UintTypeName); for (int i = 0; i < data.ParameterCount; i++) { if (i != 0) { sb.AppendFormat(", {1} arg{0}", i, HLBaseTypeNames.s_UintTypeName); } else { sb.AppendFormat("{1} arg{0}", i, HLBaseTypeNames.s_UintTypeName); } } sb.Append(")\n{\n"); sb.AppendFormat("\t{1} addr = {0};\n", devAddr, HLBaseTypeNames.s_UintTypeName); sb.Append("\treturn addr("); for (int i = 0; i < data.ParameterCount; i++) { if (i != 0) { sb.AppendFormat(", arg{0}", i); } else { sb.AppendFormat("arg{0}", i); } } sb.Append(");\n}"); return(sb.ToString()); }
public void AddApi(uint addr, FunctionData funcData) { m_ExposedApis.Add(addr, funcData); string driverDir = Path.Combine( DeviceDriverDirectory, funcData.GetFinalName() + ".vhl" ); File.WriteAllText(driverDir, GenerateApiDriver(funcData, addr)); }