> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Application Notes

> Design, bring-up and tuning guidance for Qualcomm Dragonwing platforms, grouped by category.

export const APP_NOTE_CATEGORIES = [{
  name: "Thermal management",
  slug: "thermal-management",
  icon: "temperature-half",
  summary: "Thermal architecture, heat dissipation and thermal mitigation.",
  count: 1,
  color: "blue"
}, {
  name: "Boot",
  slug: "boot",
  icon: "power-off",
  summary: "Bootloader stages and interfaces.",
  count: 1,
  color: "orange"
}, {
  name: "Security Fundamentals",
  slug: "security-fundamentals",
  icon: "shield",
  summary: "Secure boot, TEE and TrustZone.",
  count: 2,
  color: "red"
}, {
  name: "Power Management",
  slug: "power-management",
  icon: "bolt",
  summary: "DVFS, low-power modes and energy-aware scheduling across the platform.",
  count: 3,
  color: "yellow"
}, {
  name: "Performance Tuning",
  slug: "performance-tuning",
  icon: "wave-square",
  summary: "Cache, memory bandwidth, profiling and core-affinity tuning for Qualcomm Linux.",
  count: 2,
  color: "gray"
}, {
  name: "Interrupts & Real-Time Behavior",
  slug: "interrupts-real-time-behavior",
  icon: "stopwatch",
  summary: "Latency, determinism and the real-time kernel.",
  count: 1,
  color: "red"
}, {
  name: "Debugging & Trace",
  slug: "debugging-trace",
  icon: "bug",
  summary: "Crash dumps, early boot logs and hardware trace.",
  count: 2,
  color: "gray"
}, {
  name: "Camera",
  slug: "camera",
  icon: "camera",
  summary: "Sensor bring-up, tuning procedure and pipeline design.",
  count: 3,
  color: "purple"
}];

export const APP_NOTES = [{
  topic: "Thermal management",
  category: "Thermal management",
  slug: "thermal-management",
  summary: "Provides guidance on thermal architecture, heat dissipation techniques and thermal mitigation",
  links: ["https://dragonwingdocs.qualcomm.com/System/Power/overview-of-thermal-management"],
  public: true
}, {
  topic: "Bootloader stages",
  category: "Boot",
  slug: "boot",
  summary: "Provides introduction to bootloader stages and interfaces",
  links: ["https://dragonwingdocs.qualcomm.com/System/Boot"],
  public: true
}, {
  topic: "Secure boot",
  category: "Security Fundamentals",
  slug: "security-fundamentals",
  summary: "Provides guidance for enabling Secure Boot on Qualcomm platforms to establish a trusted boot chain, protect system integrity, and prevent unauthorized software execution during startup",
  links: ["https://dragonwingdocs.qualcomm.com/System/Security/security-features#secure-boot"],
  public: true
}, {
  topic: "Trusted execution environments (TEE, TrustZone)",
  category: "Security Fundamentals",
  slug: "security-fundamentals",
  summary: "Introduces Qualcomm Trusted Execution Environment (TEE) architecture and TrustZone-based isolation mechanisms for protecting sensitive applications, data, and security-critical operations",
  links: ["https://dragonwingdocs.qualcomm.com/System/Security/security-features#qualcomm-tee"],
  public: true
}, {
  topic: "Dynamic Voltage and Frequency Scaling (DVFS)",
  category: "Power Management",
  slug: "power-management",
  summary: "Explains configuration of DVFS governors to balance power and performance",
  links: ["https://dragonwingdocs.qualcomm.com/System/Kernel/configure-the-dynamic-voltage-and-frequency-scaling-dvfs-governors#configure-dvfs-governors"],
  public: true
}, {
  topic: "Low-power modes (sleep, deep sleep, standby)",
  category: "Power Management",
  slug: "power-management",
  summary: "Provides guidance on Qualcomm platform power states, including sleep, deep sleep, and standby modes, to minimize power consumption while maintaining system responsiveness and reliability",
  links: ["https://dragonwingdocs.qualcomm.com/System/Power/power-states-and-features"],
  public: true
}, {
  topic: "Energy-aware scheduling",
  category: "Power Management",
  slug: "power-management",
  summary: "Provides guidance on configuring the Linux scheduler and energy-aware scheduling policies to optimize task placement, improve power efficiency, and maintain system performance",
  links: ["https://dragonwingdocs.qualcomm.com/System/Kernel/configure-the-scheduler#configure-the-scheduler"],
  public: true
}, {
  topic: "Core affinity",
  category: "Performance Tuning",
  slug: "performance-tuning",
  summary: "Provides guidance on CPU core affinity and workload placement strategies to optimize performance by assigning compute-intensive tasks to high-performance cores",
  links: ["https://dragonwingdocs.qualcomm.com/System/Performance/troubleshoot-performance-issues#use-large-cores-for-heavy-use-cases"],
  public: true
}, {
  topic: "Profiling tools",
  category: "Performance Tuning",
  slug: "performance-tuning",
  summary: "Provides guidance on using Qualcomm tools to analyze CPU, memory, and system behavior, helping identify bottlenecks and optimize application performance",
  links: ["https://dragonwingdocs.qualcomm.com/System/Performance/analyze-performance-with-tools"],
  public: true
}, {
  topic: "Deterministic execution techniques",
  category: "Interrupts & Real-Time Behavior",
  slug: "interrupts-real-time-behavior",
  summary: "Provides guidance on leveraging the Linux Real-Time (RT) kernel to achieve deterministic task execution, minimize latency, and improve responsiveness for time-critical applications",
  links: ["https://dragonwingdocs.qualcomm.com/System/Performance/features-impacting-performance#understand-the-real-time-rt-kernel"],
  public: true
}, {
  topic: "Crash dump analysis",
  category: "Debugging & Trace",
  slug: "debugging-trace",
  summary: "Provides guidance on collecting and analyzing RAM dumps to identify root causes of system crashes, software failures, and unexpected platform behavior",
  links: ["https://dragonwingdocs.qualcomm.com/System/Debug-Subsystem/collect-and-parse-ram-dump#collect-and-parse-ram-dump"],
  public: true
}, {
  topic: "Kernel boot debug",
  category: "Debugging & Trace",
  slug: "debugging-trace",
  summary: "Provides guidance on kernel logging and early boot diagnostics to capture critical startup information and accelerate root-cause analysis during system bring-up",
  links: ["https://dragonwingdocs.qualcomm.com/System/Kernel/kernel-logging"],
  public: true
}, {
  topic: "Developing camera sensors drivers",
  category: "Camera",
  slug: "camera",
  summary: "Provides guidance on developing and integrating camera sensor drivers to enable support for new camera modules and ensure seamless operation within the Qualcomm camera framework",
  links: ["https://dragonwingdocs.qualcomm.com/Addendum-docs/Camera/addendum/camera-addendum-overview#develop-sensor-drivers"],
  public: false
}, {
  topic: "Camera tuning",
  category: "Camera",
  slug: "camera",
  summary: "Provides guidance on camera tuning workflows and image quality optimization techniques to achieve desired performance across exposure, color, focus, and imaging use cases",
  links: ["https://dragonwingdocs.qualcomm.com/Addendum-docs/Camera/addendum/camera-addendum-overview#tune-the-camera"],
  public: false
}, {
  topic: "Customizing camera usecases and pipelines",
  category: "Camera",
  slug: "camera",
  summary: "Provides guidance on designing and customizing camera pipelines by configuring sensor, ISP, and processing stages to meet application-specific requirements for resolution, frame rate, format, and image quality",
  links: ["https://dragonwingdocs.qualcomm.com/Addendum-docs/Camera/addendum/camera-addendum-overview#customize-camera-use-cases-and-pipelines"],
  public: false
}];

export const SHOW_CATEGORY_CARDS = false;

export const CATEGORY_OPTIONS = [{
  name: "All categories",
  slug: "all",
  icon: "layer-group"
}, ...APP_NOTE_CATEGORIES];

export const AppNotes = () => {
  const [query, setQuery] = useState('');
  const [category, setCategory] = useState('all');
  const [open, setOpen] = useState(false);
  const dropdown = useRef(null);
  const needle = query.trim().toLowerCase();
  const current = APP_NOTE_CATEGORIES.find(c => c.slug === category);
  const selected = CATEGORY_OPTIONS.find(c => c.slug === category) || CATEGORY_OPTIONS[0];
  const notes = APP_NOTES.filter(n => (category === 'all' || n.slug === category) && (needle === '' || (n.topic + ' ' + n.summary + ' ' + n.category).toLowerCase().includes(needle)));
  const showCards = category === 'all' && needle === '';
  useEffect(() => {
    if (!open) return;
    const onPointerDown = event => {
      if (dropdown.current && !dropdown.current.contains(event.target)) setOpen(false);
    };
    const onKeyDown = event => {
      if (event.key === 'Escape') {
        setOpen(false);
        const trigger = dropdown.current && dropdown.current.querySelector('.appnotes-dd-trigger');
        if (trigger) trigger.focus();
      }
    };
    document.addEventListener('mousedown', onPointerDown);
    document.addEventListener('keydown', onKeyDown);
    return () => {
      document.removeEventListener('mousedown', onPointerDown);
      document.removeEventListener('keydown', onKeyDown);
    };
  }, [open]);
  const openNote = note => event => {
    if (note.links.length === 0 || event.target.closest('a, button')) return;
    if (String(window.getSelection() || '').length > 0) return;
    window.open(note.links[0], '_blank', 'noopener,noreferrer');
  };
  const pickCategory = event => {
    const link = event.target.closest('a[href^="#category-"]');
    if (!link || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
    event.preventDefault();
    setCategory(link.getAttribute('href').replace('#category-', ''));
  };
  return <div className="appnotes">
      <div className="appnotes-head">
        <h1 className="appnotes-title text-3xl sm:text-4xl font-semibold tracking-tight text-gray-900 dark:text-gray-200 [overflow-wrap:anywhere]">Application Notes</h1>
      </div>
      <div className="appnotes-controls">
        <label className="appnotes-search">
          <Icon icon="magnifying-glass" size={15} />
          <input type="search" value={query} placeholder="Search application notes..." aria-label="Search application notes" onChange={event => setQuery(event.target.value)} />
        </label>
        <div className="appnotes-dd" ref={dropdown}>
          <button type="button" className="appnotes-dd-trigger group flex w-full items-center gap-1 pl-2 pr-3.5 py-1.5 rounded-[0.85rem] border border-gray-200/70 dark:border-white/[0.07] hover:bg-gray-600/5 dark:hover:bg-gray-200/5" aria-haspopup="listbox" aria-expanded={open} aria-label="Filter by category" onClick={() => setOpen(!open)}>
            <span className="nav-dropdown-item-icon size-8 flex items-center justify-center rounded-lg shrink-0 border border-gray-200/70 dark:border-white/[0.07]"><Icon icon={selected.icon} size={16} /></span>
            <span className="nav-dropdown-item-text-container flex-1 px-1 flex flex-col grow text-left"><span className="nav-dropdown-item-title text-base lg:text-sm font-medium text-gray-800 dark:text-gray-300">{selected.name}</span></span>
            <svg viewBox="0 0 18 18" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true" className={open ? 'appnotes-dd-chevron size-3 shrink-0 is-open' : 'appnotes-dd-chevron size-3 shrink-0'}><path d="M6.5 2.75L12.75 9L6.5 15.25" /></svg>
          </button>
          {open ? <div className="appnotes-dd-panel shadow-xl dark:shadow-none shadow-gray-500/5 bg-background-light dark:bg-background-dark rounded-2xl border-standard p-1" role="listbox" aria-label="Category">
              {CATEGORY_OPTIONS.map(c => <button key={c.slug} type="button" role="option" aria-selected={c.slug === category} className="appnotes-dd-item w-full flex group items-center gap-1 rounded-xl pl-1.5 pr-2.5 py-1.5 hover:bg-gray-950/5 dark:hover:bg-white/5" onClick={() => {
    setCategory(c.slug);
    setOpen(false);
  }}>
                  <span className="nav-dropdown-item-icon size-8 flex items-center justify-center rounded-lg shrink-0 border border-gray-200/70 dark:border-white/[0.07]"><Icon icon={c.icon} size={16} /></span>
                  <span className="nav-dropdown-item-text-container flex-1 px-1 flex flex-col grow text-left"><span className={c.slug === category ? 'nav-dropdown-item-title text-base lg:text-sm font-medium text-primary dark:text-primary-light' : 'nav-dropdown-item-title text-base lg:text-sm font-medium text-gray-800 dark:text-gray-300'}>{c.name}</span></span>
                  {c.slug === category ? <svg viewBox="0 0 18 18" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true" className="appnotes-dd-check ml-2 size-4 shrink-0"><path d="M2.75 9.5L6.5 13.25L15.25 4.5" /></svg> : null}
                </button>)}
            </div> : null}
        </div>
      </div>
      {showCards && SHOW_CATEGORY_CARDS ? <div className="appnotes-cards" onClick={pickCategory}>
          <Columns cols={3}>
            {APP_NOTE_CATEGORIES.map(c => <Card key={c.slug} title={c.name} icon={c.icon} href={'#category-' + c.slug}>
                {c.summary} {c.count} topics.
              </Card>)}
          </Columns>
        </div> : null}
      {showCards ? null : <div className="appnotes-result">
          <button type="button" className="appnotes-clear" onClick={() => {
    setCategory('all');
    setQuery('');
  }}>Clear filters</button>
        </div>}
      {notes.length === 0 ? <p className="appnotes-empty">No application note matches that search.</p> : <div className="appnotes-table-wrap" role="region" aria-label="Application notes" tabIndex={0}>
          <table className="appnotes-table">
            <thead>
              <tr>
                <th scope="col">Topic</th>
                <th scope="col">Category</th>
              </tr>
            </thead>
            <tbody>
              {notes.map(n => <tr key={n.topic} className={n.links.length > 0 ? 'appnotes-row is-linked' : 'appnotes-row'} onClick={openNote(n)}>
                  <td>
                    <span className="appnotes-topic">
                      {n.links.length > 0 ? <a href={n.links[0]} target="_blank" rel="noopener noreferrer">{n.public ? null : <span className="appnotes-lock" title="Qualcomm login required"><Icon icon="lock" size={12} /><span className="appnotes-sr-only">(Qualcomm login required) </span></span>}{n.topic}<span className="appnotes-sr-only"> (opens in a new tab)</span></a> : n.topic}
                    </span>
                    <span className="appnotes-summary">{n.summary}</span>
                  </td>
                  <td className="appnotes-category"><Badge color={(APP_NOTE_CATEGORIES.find(c => c.slug === n.slug) || ({})).color}>{n.category}</Badge></td>
                </tr>)}
            </tbody>
          </table>
        </div>}
    </div>;
};

<AppNotes />
