Atmel_bsp_generator.Program.GenereteAddFrameWorksDir C# (CSharp) Method

GenereteAddFrameWorksDir() static private method

static private GenereteAddFrameWorksDir ( BSPDirectories pBspDir, string pstrTypSam ) : List
pBspDir BSPDirectories
pstrTypSam string
return List
        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;
        }