9 #ifndef __NODAMUSHI_SVD_NORMALIZED_PERIPHERAL_HPP__ 10 #define __NODAMUSHI_SVD_NORMALIZED_PERIPHERAL_HPP__ 35 template<
typename STRREF>
struct Peripheral
145 template<
typename STR>
148 const size_t ps = p.
size();
152 if(ps == pindex +1)
return c;
153 else return c->find(p,pindex+1);
156 if(ps == pindex +1)
return c;
157 else return c->find(p,pindex+1);
168 template<
typename STR>
171 const size_t ps = p.
size();
175 if(ps == pindex +1)
return c;
176 else return c->find_cluster(p,pindex+1);
187 template<
typename STR>
190 const size_t ps = p.
size();
195 return c->find_register(p,pindex+1);
196 }
else if(ps == pindex + 1){
208 template<
typename STR>
211 const size_t ps = p.
size();
216 return c->find_field(p,pindex+1);
217 }
else if(ps == pindex + 2){
219 return c->find_field(p,pindex+1);
294 if(n.svd.derivedFrom)
298 if(n.dim&& n.dim.index!=0){
309 size_t addrBlockSize = 0;
311 if(n.svd.addressBlock)
312 addrBlockSize = n.svd.addressBlock.get().size();
315 const auto* ptr = n.derivedFrom;
317 const auto& v = ptr->svd.addressBlock;
318 if(v) addrBlockSize += v.get().size();
319 ptr = ptr->derivedFrom;
325 if(n.svd.addressBlock){
326 for(
const auto& s:*n.svd.addressBlock)
331 const auto* ptr = n.derivedFrom;
333 if(ptr->svd.addressBlock){
334 for(
const auto& s:ptr->svd.addressBlock.get())
337 ptr = ptr->derivedFrom;
347 const auto& v = *n.svd.interrupt;
354 for(
const auto& c:n.clusters){
357 for(
const auto& c:n.registers)
361 {
return a.addressOffset < b.addressOffset;});
363 {
return a.addressOffset < b.addressOffset;});
367 constexpr
void*
get_parent2()const noexcept{
return nullptr;}
382 namespace nv = ::nodamushi::visitor;
386 if(ret == r::BREAK)
return ret;
387 if(ret == r::SKIP)
return r::CONTINUE;
390 if(ret == r::BREAK)
return ret;
391 if(ret == r::SKIP)
return r::CONTINUE;
395 if(ret == r::BREAK)
return ret;
396 if(ret == r::SKIP)
return r::CONTINUE;
399 if(ret == r::BREAK)
return ret;
407 #endif // __NODAMUSHI_SVD_NORMALIZED_PERIPHERAL_HPP__ STRREF description
<description>
uint64_t baseAddress
base address
std::vector< Interrupt > interrupt
<interrupt> elements.
list< Register > registers
<register> elements list.This list is sorted by the addressOffset.
Access get_access() const
resolve the value of access and return it.
::nodamushi::svd::normalized::Cluster< STRREF > Cluster
std::shared_ptr< T > node_ptr
helper for copy derivedFrom element
uint64_t get_address() const
get baseAddress
nullable< uint64_t > resetMask
<resetMask>
constexpr void * get_parent2() const noexcept
always return nullptr
#define __NORMALIZED_DERIVED_FROM(name)
__NORMALIZED_DERIVED_FROM(name)
nullable< uint32_t > size
<size>
__NX_NORM_HANDLE_VISIT(Enumeration)
size_t size() const noexcept
uint64_t get_resetValue() const
resolve the value of resetValue and return it.
path< STRREF > derivedFrom
derivedFrom attribute
auto get_parent() const noexcept
get parent Device pointer
list< Cluster > clusters
<cluster> elements list.This list is sorted by the addressOffset.
STRREF appendToName
<appendToName>
STRREF alternatePeripheral
<alternatePeripheral>
node_ptr< Register > find_register(::nodamushi::svd::path< STR > &p, size_t pindex=0)
find register element
nullable< uint64_t > resetValue
<resetValue>
path< STR > & add_name(string_ref p)
const std::string & string_ref
Protection get_protection() const
resolve the value of protection and return it.
uint32_t get_size() const
resolve the value of size and return it.
Peripheral< STRREF > this_t
STRREF headerStructName
<headerStructName>
uint64_t get_resetMask() const
resolve the value of resetMask and return it.
::nodamushi::svd::normalized::Register< STRREF > Register
node_ptr< Cluster > find_cluster(::nodamushi::svd::path< STR > &p, size_t pindex=0)
find cluster element
container class decralation
STRREF groupName
<groupName>
void update_parent_of_children(list< T > &l, node_ptr< You > &you)
std::weak_ptr< Parent > parent_ptr
T get(T defaultValue) const noexcept
bool has_register_name_appendix() const noexcept
prependToName or appendToName is not empty
void update_parent(p_ptr &new_parent, node_ptr< this_t > &me)
std::vector< AddressBlock > addressBlock
<addressBlock> emenents
Access
Read/Write Access type enum.<access> Read-Write/Read-Only/Write-Only/Write-Once/Read- Write Once.
dim,dimIndex,array information object.
parent_ptr< Device< STRREF > > p_ptr
dim_info dim
dimemsion information object.
normalized interrupt element
normalized peripheral element
auto get_parent() noexcept
get parent Device pointer
normalized interrupt element
STRREF prependToName
<prependToName>
::nodamushi::svd::path get_path() const
get path
Protection
<protection> enum
node_ptr< void > find(::nodamushi::svd::path< STR > &p, size_t pindex=0)
find path element
node_ptr< R > __find_helper(list< R > &v, string_ref n)
nullable< Protection > protection
<protection>
STRREF disableCondition
<disableCondition>
#define __NORMALIZED_DERIVED_FROM_HELPER(name)
node_ptr< Field > find_field(::nodamushi::svd::path< STR > &p, size_t pindex=0)
find field element
nullable< Access > access
<access>