static List<Framework> GenereteAddFrameWorksDir(BSPDirectories pBspDir, string pstrTypSam)
{
List<Framework> bleFrameworks = new List<Framework>();
List<PropertyEntry> propFr = new List<PropertyEntry>();
PropertyList pl = new PropertyList();
List<string> a_SimpleFileConditions = new List<string>();
string a_macname = "com.sysprogs.arm.atmel.drivers."+ pstrTypSam+".";
string strIdFr = "com.sysprogs.arm.atmel.drivers." + pstrTypSam ;
string strClFr = "com.sysprogs.arm.atmel.cl.drivers."+ pstrTypSam;
string nameFr = pstrTypSam.ToUpper()+"_Drivers";
string asrcJob = @"$$BSPGEN:INPUT_DIR$$\"+ pstrTypSam+@"\drivers";
string astrTargetJob = pstrTypSam + @"\drivers";
string astrFileJob = "-*example*.c;-*example*.h;-*unit_test*.*;-*doxygen*;-*mega*;-*avr*;-*adc_enhanced_mode*;-*quick_start*;*.c;*.h";
string aInclJob = "";// " - sam[0-9g]?*;-uc*;*.h";
string aPrjInclMsk = "*.c;*.h";
List<string> strIncompFrIDs = new List<string>();
if (pstrTypSam.ToUpper() == "SAM")
strIncompFrIDs.Add("com.sysprogs.arm.atmel.drivers.sam0");
else
{
aPrjInclMsk = "-*_sam*.h;*.c;*.h";
aInclJob = "$$SYS:BSP_ROOT$$/sam0/drivers/system/clock/$$com.sysprogs.atmel.sam0.driver.clock$$;" +
"$$SYS:BSP_ROOT$$/sam0/drivers/system/clock/$$com.sysprogs.atmel.sam0.driver.clock$$/module_config;" +
"$$SYS:BSP_ROOT$$/sam0/drivers/system/interrupt/$$com.sysprogs.atmel.sam0.driver.interrupt$$;" +
"$$SYS:BSP_ROOT$$/sam0/drivers/system/interrupt/$$com.sysprogs.atmel.sam0.driver.interrupt$$/module_config;" +
"$$SYS:BSP_ROOT$$/sam0/drivers/system/power/$$com.sysprogs.atmel.sam0.driver.power$$;" +
"$$SYS:BSP_ROOT$$/sam0/drivers/system/reset/$$com.sysprogs.atmel.sam0.driver.reset$$"+
";$$SYS:BSP_ROOT$$/sam0/drivers/adc/$$com.sysprogs.atmel.sam0.driver.globaldir$$";
foreach(var dirdr in Directory.GetDirectories(Path.Combine(pBspDir.InputDir, pstrTypSam + @"\drivers")))
foreach(var dirdr1 in Directory.GetDirectories(dirdr))
if(dirdr1.Contains("_sam"))
{
string aName = dirdr.Substring(dirdr.LastIndexOf("\\") + 1);
aInclJob += @";$$SYS:BSP_ROOT$$/sam0/drivers/" + aName + @"/" + aName+"$$com.sysprogs.atmel.sam0.driver.globaldir$$";
break;
}
strIncompFrIDs.Add("com.sysprogs.arm.atmel.drivers.sam");
}
string[] strPropFrim = Directory.GetDirectories(Path.Combine(pBspDir.InputDir, pstrTypSam + @"\drivers"));
string aAddSimpleCond = "";
foreach (var line in strPropFrim)
{
bool aflIsCond = false;
string a_name = line.Substring(line.LastIndexOf("\\") + 1).ToLower();
if(a_name.Contains("gpio") && pstrTypSam.ToUpper() == "SAM")
aInclJob = "";
if (Directory.GetFiles(line, "*.c", SearchOption.AllDirectories).Count() == 0)
continue;
string[] strDirToDir = Directory.GetDirectories(line, "*", SearchOption.AllDirectories);
// string[] strDirToDir = Directory.GetFiles(line, "*", SearchOption.AllDirectories);
// string aDrivCond = "^" + a_name + @"\\: $$" + a_macname + a_name + "$$ == 1";
string aDrivCond =" $$" + a_macname + a_name + "$$ == 1";
if (pstrTypSam.ToUpper() == "SAM0")
{
foreach (var dir in strDirToDir)
if (dir.Contains("_sam") )
{
if (dir.Contains("quick"))
continue;
string aPatchPref = dir.Substring(dir.LastIndexOf(a_name+"\\") + a_name.Length + 1).ToLower();
string prefs = "^sam(";
if (dir.EndsWith("module_config"))
continue;
if (dir.Contains("unit_test"))
continue;
int ac = 0;
int idx1 = dir.LastIndexOf("\\");
int idx2 = dir.LastIndexOf("_sam");
string aflPtch;
if (idx2 < idx1)
aflPtch = dir.Remove(idx1);
else
aflPtch = dir;
foreach (var pref in aflPtch.Substring(dir.LastIndexOf("_sam") + 4).Split('_'))
{
if (pref == "")
continue;
/* int idx = pref.LastIndexOf("\\");
string regdata;
if (idx > 0)
regdata = pref.Remove(idx);
else*/
// regdata = pref;
if (pref[0] != '0' && pref[0] != 'd' && pref[0] != 'r' && pref[0] != 'l' && pref[0] != 'b' && pref[0] != 'c')
throw new Exception(" unknow prefix " + pref + " in " + dir);
if(ac > 0)
prefs += "|";
if (pref == "0")
prefs = "sam(?!d20";
else
prefs += pref;//.Replace(".c", "");
ac++;
}
prefs += ")";
aPatchPref = aPatchPref.Replace(@"\",@"\\");
/* if(aPatchPref.EndsWith(".c"))//file
aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @":$$com.sysprogs.atmel.sam32._header_prefix$$ =~ " + prefs;
else
*/ aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @"\\:$$com.sysprogs.atmel.sam32._header_prefix$$ =~ " + prefs;
a_SimpleFileConditions.Add(aAddSimpleCond+ "&& "+ aDrivCond);
aflIsCond = true;
}/*
string[] strFileToDir = Directory.GetFiles(line, "*_sam_*.c", SearchOption.AllDirectories);
foreach(var fl in strFileToDir)
{
int ac = 0;
string aPatchPref = fl.Substring(fl.LastIndexOf(a_name + "\\") + a_name.Length + 1).ToLower();
string prefs = "^sam(";
foreach (var pref in fl.Substring(fl.LastIndexOf("_sam") + 4).Split('_'))
{
if (pref == "")
continue;
if ( pref[0] != 'd' && pref[0] != 'r' && pref[0] != 'l' && pref[0] != 'b' && pref[0] != 'c')
throw new Exception(" unknow prefix " + pref + " in " + dir);
if (ac > 0)
prefs += "|";
if (pref == "0")
prefs = "sam(?!d20";
else
prefs += pref.Replace(".c", "");
ac++;
}
prefs += ")";
aPatchPref = aPatchPref.Replace(@"\", @"\\");
aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @":$$com.sysprogs.atmel.sam32._header_prefix$$ =~ " + prefs;
a_SimpleFileConditions.Add(aAddSimpleCond + "&& " + aDrivCond);
aflIsCond = true;
}
*/
if (aflIsCond)
{
foreach (var dir in strDirToDir)
if (!dir.Contains("_sam"))
{
if (dir.Contains("quick"))
continue;
if (dir.Contains("unit") || dir.Contains("docimg"))
continue;
if (Directory.GetFiles(dir,"*.c", SearchOption.TopDirectoryOnly).Count() == 0)
continue;
string aPatchPref = dir.Substring(dir.LastIndexOf(a_name + "\\") + a_name.Length + 1).ToLower();
aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @"\\:" + aDrivCond;
a_SimpleFileConditions.Add(aAddSimpleCond);
}
string[] strFileToDir = Directory.GetFiles(line, "*.c");
foreach (var file in strFileToDir)
{
if (Path.GetFileNameWithoutExtension(file).Contains("_sam_"))
{
string prefs = "sam(";
string aPatchPref = file.Substring(file.LastIndexOf(a_name + "\\") + a_name.Length + 1).ToLower();
foreach (var pref in Path.GetFileNameWithoutExtension(file).Substring(Path.GetFileNameWithoutExtension(file).LastIndexOf("_sam_") + 5).Split('_'))
{
// regdata = pref;
if (pref[0] != '0' && pref[0] != 'd' && pref[0] != 'r' && pref[0] != 'l' && pref[0] != 'b' && pref[0] != 'c')
throw new Exception(" unknow prefix " + pref + " in ");
if (pref == "0")
prefs = "sam(?!d20";
else
prefs += pref;//.Replace(".c", "");
}
prefs += ")";
aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @":$$com.sysprogs.atmel.sam32._header_prefix$$ =~ " + prefs;
a_SimpleFileConditions.Add(aAddSimpleCond + aDrivCond);
if (prefs == "sam()")
a_SimpleFileConditions.Add(aAddSimpleCond);
}
else
{
aAddSimpleCond = "^" + a_name + @"\\" + Path.GetFileName(file) + ":" + aDrivCond;
a_SimpleFileConditions.Add(aAddSimpleCond);
}
}
}
}
/* {
if (dir.Contains("quick"))
continue;
string aPatchPref = dir.Substring(dir.LastIndexOf("\\") + 1).ToLower();
if (dir.Contains("_sam_d_r"))
{
aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @"\\:$$com.sysprogs.atmel.typsam0$$ == sam_d_r";
continue;
}
if (dir.Contains("_sam_b"))
{
aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @"\\:$$com.sysprogs.atmel.typsam0$$ == sam_b";
continue;
}
if (dir.Contains("_sam_l_c"))
{
aAddSimpleCond = "^" + a_name + @"\\" + aPatchPref + @"\\:$$com.sysprogs.atmel.typsam0$$ == sam_l_c";
continue;
}
if (dir.Contains("_sam_"))
Console.WriteLine(" throw new Exception( unknow prefix in "+ dir);
}
*/
propFr.Add(new PropertyEntry.Boolean
{
Name = a_name,
UniqueID = a_macname+a_name,
ValueForTrue = "1",
ValueForFalse = "0",
});
if(!aflIsCond)
a_SimpleFileConditions.Add("^" + a_name + @"\\:" + aDrivCond);
/*
a_SimpleFileConditions.Add(aDrivCond) ;
if(aAddSimpleCond!= "")
a_SimpleFileConditions.Add(aAddSimpleCond);*/
}
List<PropertyGroup> pg = new List<PropertyGroup>();
pg.Add( new PropertyGroup {Name = nameFr, Properties = propFr });
pl.PropertyGroups = pg;
aInclJob = aInclJob.Trim(';');
if (aInclJob == "")
aInclJob = null;
bleFrameworks.Add(new Framework
{
Name = nameFr + "Library",
ID = strIdFr,
ClassID = strClFr,
ProjectFolderName = "Atmel_" + nameFr,
DefaultEnabled = false,
IncompatibleFrameworks = strIncompFrIDs.ToArray(),
CopyJobs = new CopyJob[]
{
new CopyJob
{
PreprocessorMacros = "ADC_CALLBACK_MODE=true;USART_CALLBACK_MODE=true",
SourceFolder = asrcJob ,
TargetFolder = astrTargetJob ,
FilesToCopy = astrFileJob,
SimpleFileConditions = a_SimpleFileConditions.ToArray(),
AutoIncludeMask = "-*_sam*.h;*.h",
AdditionalIncludeDirs = aInclJob,
ProjectInclusionMask = aPrjInclMsk
}
},
ConfigurableProperties = pl,
});
return bleFrameworks;
}