আমরা ওপেনথ্রেড গিটহাব রিপোজিটরিতে CLI সোর্স ফাইল থেকে CLI কমান্ড তৈরি করি।
এই নির্দেশিকাটি আমাদের কাস্টম ডক্সিজেন মন্তব্যগুলি কীভাবে ব্যবহার করতে হয় তার নির্দেশাবলী প্রদান করে যা আমরা কমান্ড তালিকা তৈরি করতে ব্যবহার করি।
শুরু করুন
একটি CLI কমান্ড নথিভুক্ত করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন। প্রদত্ত ক্রম অনুসারে আপনি এই পদক্ষেপগুলি অনুসরণ করা গুরুত্বপূর্ণ৷
openthread/src/cli
ডিরেক্টরি থেকে সংশ্লিষ্টCmd
খুঁজুন। উদাহরণস্বরূপ,ba state
খুঁজতে,Cmd("ba")
অনুসন্ধান করুন। প্রতিটি কমান্ডের একটি যুক্ত ফাংশন টেমপ্লেট থাকবে:template <> otError Interpreter::Process<Cmd("ba")>(Arg aArgs[])
ফাংশন টেমপ্লেটে, সঠিক কমান্ড লজিক সনাক্ত করুন। উদাহরণস্বরূপ,
ba state
:else if (aArgs[0] == "state")
যুক্তি শুরু হওয়ার আগে,
@cli
ডক্সিজেন ব্লক শুরু করুন:/** * @cli ba state
পরবর্তী, অবিলম্বে
@cli
নীচে,@code
ব্যবহার করে উদাহরণ যোগ করুন। অন্তত একটি উদাহরণ অন্তর্ভুক্ত করুন.>
প্রম্পট অন্তর্ভুক্ত করবেন না এবং স্ট্যান্ডার্ডDone
প্রতিক্রিয়া সহ সম্পূর্ণ রিটার্ন আউটপুট নথিভুক্ত করতে ভুলবেন না।* @code * ba state * Started * Done * @endcode
যেহেতু CLI কমান্ডগুলি সাধারণ API পদ্ধতি এবং ফাংশনে কমান্ড-লাইন অ্যাক্সেস সরবরাহ করে, কিছু কমান্ড তাদের সংশ্লিষ্ট API-এর মতো একই বিবরণ ভাগ করে। কমান্ড বর্ণনা একই হলে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
openthread/include/openthread
ডিরেক্টরি থেকে সংশ্লিষ্ট API খুঁজুন। উদাহরণস্বরূপ,otBorderAgentGetState
এba state
মানচিত্র।api_copy
কমান্ড ব্যবহার করুন, তারপর সরাসরি এর নীচে API নাম লিখুন। API সংজ্ঞার সামনে, স্বয়ংক্রিয় ডক্সিজেন লিঙ্ক তৈরি করতে পাউন্ড চিহ্ন#
ব্যবহার করা নিশ্চিত করুন।@par api_copy #otBorderAgentGetState
স্বয়ংক্রিয়ভাবে একটি OT CLI কমান্ড তৈরি করার জন্য প্রয়োজনীয় ন্যূনতম ডক্সিজেন মন্তব্যগুলির একটি সম্পূর্ণ উদাহরণ এখানে রয়েছে:
/**
* @cli ba state
* @code
* ba state
* Started
* Done
* @endcode
* @par api_copy
* #otBorderAgentGetState
*/
HTML আউটপুট পর্যালোচনা করতে, ba state পড়ুন। উন্নত উদাহরণ এবং অতিরিক্ত বিকল্পগুলির জন্য, নিম্নলিখিত বিভাগগুলি পড়ুন।
CLI টেমপ্লেট বিকল্প
CLI কমান্ডগুলি ALIAS ট্যাগ @cli
দিয়ে শুরু করে একটি অবিচ্ছিন্ন মন্তব্য ব্লক দ্বারা গোষ্ঠীভুক্ত করা হয়। একাধিক @code
উদাহরণ সমর্থিত।
আপনি প্রতিটি ট্যাগ নির্দিষ্ট করা ক্রম গুরুত্বপূর্ণ.
-
@cparam
অবশ্যই@code
পরে আসবে - আপনি যদি একটি API বিবরণ অনুলিপি করছেন,
@par api_copy
অবশ্যই@cparam
এর পরে আসবে
* @cli command name (overload1,overload2)
* @code
* command name arg1
* Done
* @endcode
* @cparam command name @ca{arg1} [@ca{opt-arg}] [@ca{choose-1}|@ca{choose-2}]
* Optional parameter description; displays below the Parameter heading.
* * Markdown and lists are supported.
* @par api_copy
* #{apiName}
* @par
* Optional CLI specific paragraph. Markdown and lists are supported.
* @note Notes are supported.
* @csa{other command name}
* @sa API method or function name
পরবর্তী, প্রতিটি ALIAS ট্যাগ কীভাবে ব্যবহার করা হয় সে সম্পর্কে আরও জানুন।
কমান্ডের নাম
@cli
এর পরে যেকোন টেক্সট কমান্ড নামের হেডার হয়ে যায়। এই শিরোনামটি ডায়নামিক লিঙ্কিংয়ে ব্যবহার করা হয়, উদাহরণস্বরূপ নেটডেটা প্রকাশ উপসর্গ কমান্ড:
* @cli netdata publish prefix
অন্যান্য কমান্ড আরো জটিল হতে পারে. উদাহরণস্বরূপ, netdata publish dnssrp unicast
কয়েকটি বিকল্প প্রদান করে:
- ঠিকানা এবং পোর্ট নম্বর দ্বারা প্রকাশ করুন
- পোর্ট নম্বর এবং ডিভাইসের মেশ-লোকাল EID দ্বারা প্রকাশ করুন
যদি একটি কমান্ড ওভারলোড করা হয়, কমান্ডটি অনন্যভাবে সনাক্ত করতে বন্ধনী ব্যবহার করুন।
* @cli netdata publish dnssrp unicast (mle)
* @cli netdata publish dnssrp unicast (addr,port)
কমান্ডের বর্ণনা
কমান্ডের বিবরণ নথিভুক্ত করার তিনটি উপায় রয়েছে। আপনি API বিবরণ অনুলিপি করতে পারেন, API বিবরণ ব্যবহার করতে পারেন কিন্তু অতিরিক্ত তথ্য যোগ করতে পারেন, অথবা একটি সম্পূর্ণ অনন্য বিবরণ প্রদান করতে পারেন যা শুধুমাত্র CLI কমান্ডের অন্তর্গত। পরবর্তী বিভাগে, আমরা প্রতিটি পদ্ধতির উপর যেতে হবে.
সংশ্লিষ্ট API বিবরণ অনুলিপি করুন
সংশ্লিষ্ট API পদ্ধতি বা ফাংশন অনুলিপি করতে api_copy
ব্যবহার করুন। যখন আপনি API গুলি অনুলিপি করেন, নিশ্চিত করুন যে বিবরণটি API এবং CLI কমান্ড উভয়ের জন্যই কাজ করবে। শুধুমাত্র একটি ফাংশনে প্রযোজ্য বাক্যাংশ ব্যবহার করা এড়িয়ে চলুন, উদাহরণস্বরূপ This function
বা This method
। একটি সক্রিয় ভয়েস পছন্দ করুন, উদাহরণস্বরূপ Gets the
বা Sets the
।
* @par api_copy
* #otBorderAgentGetState
API বিবরণে আরও তথ্য যোগ করুন
আপনি যদি api_copy
ব্যবহার করতে চান তবে অতিরিক্ত তথ্য যোগ করতে চান যা শুধুমাত্র CLI কমান্ডে প্রযোজ্য, @par
ব্যবহার করুন। @par
ট্যাগের পরে, পরবর্তী লাইনে নেমে যেতে ভুলবেন না।
* @par api_copy
* #otBorderAgentGetState
* @par
* CLI description here; add a few things that do not apply to the API method.
* @par
* Start a new paragraph.
এই অনুচ্ছেদগুলি API বর্ণনার পরে প্রদর্শিত হয়।
শুধুমাত্র CLI-নির্দিষ্ট বিবরণ প্রদান করুন
কিছু CLI কমান্ড একাধিক API ব্যবহার করে, অথবা API কল থেকে আলাদা। অন্যদের কোনো সংশ্লিষ্ট API নেই, উদাহরণস্বরূপ netdata help
। একটি পৃথক বিবরণ প্রদান করতে, @par
ব্যবহার করুন। @par
শিরোনাম অন্তর্ভুক্ত করবেন না এবং পরবর্তী লাইনে আপনার বিবরণ শুরু করুন। এই পরিস্থিতিতে, @api_copy
ব্যবহার করবেন না।
/**
* @cli netdata help
* @code
* netdata help
* ...
* show
* steeringdata
* unpublish
* Done
* @endcode
* @par
* Gets a list of `netdata` CLI commands.
*/
পরামিতি
@cparam
এবং @ca
ব্যবহার করে কমান্ড প্যারামিটার সংজ্ঞায়িত করুন।
- ঐচ্ছিক আর্গুমেন্টের চারপাশে
[ ]
বন্ধনী রাখুন। - উল্লম্ব বার ব্যবহার করুন
|
(পাইপ) যুক্তি পছন্দ মধ্যে. - প্যারামিটারের বিবরণ প্রদর্শন করতে, আপনি
@cparam
ট্যাগের নীচে বাক্য এবং মার্কডাউন তালিকা লিখতে পারেন।
বিবরণ সহ পরামিতি
* @cparam netdata publish prefix @ca{prefix} [@ca{padcrosnD}] [@ca{high}|@ca{med}|@ca{low}]
* OT CLI uses mapped arguments to configure #otBorderRouterConfig values. @moreinfo{the @overview}.
HTML আউটপুট পর্যালোচনা করতে, নেটডেটা প্রকাশ উপসর্গ পড়ুন।
মার্কডাউন তালিকা সহ পরামিতি
আপনি @cparam
এর পরে তালিকাগুলিও ব্যবহার করতে পারেন। আপনি যখন ব্যবহৃত কমান্ড আর্গুমেন্ট সম্পর্কে বিশদ বিবরণ দিতে চান তখন এটি সহায়ক।
* @cparam netdata show [@ca{local}] [@ca{-x}]
* * The optional `-x` argument gets Network Data as hex-encoded TLVs.
* * The optional `local` argument gets local Network Data to sync with Leader.
HTML আউটপুট পর্যালোচনা করতে, নেটডেটা শো দেখুন।
@cli
ব্লকগুলিকে অবশ্যই একটি অবিচ্ছিন্ন মন্তব্য হতে হবে যেখানে কোনো স্পেস নেই। আপনি যদি @cparam
নীচে একটি তালিকা যোগ করেন এবং তারপর সেই তালিকার নীচে অন্য অনুচ্ছেদের প্রয়োজন হয়, একটি সময়কাল ব্যবহার করুন .
ম্যানুয়ালি তালিকা শেষ করতে।
* @cparam commandname [@ca{qmr}]
* [`q`, `m`, and `r`] map to #otLinkMetricsValues.
* * `q`: Layer 2 LQI (#otLinkMetricsValues::mLqiValue).
* * `m`: Link Margin (#otLinkMetricsValues::mLinkMarginValue).
* * `r`: RSSI (#otLinkMetricsValues::mRssiValue).
* .
* Add another paragraph here. The dot above will end the HTML list that's generated.
* This paragraph displays under the Parameters heading, and not the command description.
অতিরিক্ত উদাহরণের জন্য, ডক্সিজেনের তালিকা পড়ুন।
স্বয়ংক্রিয়ভাবে API লিঙ্ক করুন
আপনি #otFunctionName
বা @sa
দিয়ে অন্যান্য API পদ্ধতি বা ফাংশন লিঙ্ক করতে পারেন। CLI মন্তব্য ব্লকের শেষে এই লিঙ্কগুলি লিখুন।
/**
* @cli netdata publish prefix
* @code
* netdata publish prefix fd00:1234:5678::/64 paos med
* Done
* @endcode
* @cparam netdata publish prefix @ca{prefix} [@ca{padcrosnD}] [@ca{high}|@ca{med}|@ca{low}]
* OT CLI uses mapped arguments to configure #otBorderRouterConfig values. @moreinfo{the @overview}.
* @par
* Publish an on-mesh prefix entry. @moreinfo{@netdata}.
* @sa otNetDataPublishOnMeshPrefix
*/
@sa
লিঙ্কগুলি CLI এবং API রেফারেন্স শিরোনামে প্রদর্শন করে। HTML আউটপুট পর্যালোচনা করতে, নেটডেটা প্রকাশ উপসর্গ পড়ুন।
স্বয়ংক্রিয় লিঙ্ক প্রতিরোধ
কখনও কখনও, Doxygen একটি CLI ক্লাসের লিঙ্ক হিসাবে একটি সাধারণ শব্দকে ভুল করতে পারে, উদাহরণস্বরূপ, Joiner
শব্দটি। একটি বাক্যে ব্যবহৃত কীওয়ার্ড বা শ্রেণির নামের সাথে ডক্সিজেনকে লিঙ্ক করা থেকে রোধ করতে, শব্দের সামনে %
অপারেটর ব্যবহার করুন, উদাহরণস্বরূপ:
Clear the %Joiner discerner
আরও তথ্যের জন্য, ডক্সিজেন গাইডে স্বয়ংক্রিয় লিঙ্ক জেনারেশন দেখুন।
স্বয়ংক্রিয়ভাবে অন্যান্য কমান্ডের সাথে লিঙ্ক করুন
অন্যান্য কমান্ডের সাথে লিঙ্ক করতে @csa
ব্যবহার করুন।
* @csa{netdata publish dnssrp anycast}
যদি একটি কমান্ড ওভারলোড হয়, তাহলে বন্ধনী অন্তর্ভুক্ত করুন এবং প্রযোজ্য হলে একটি কমা যোগ করুন। বন্ধনীর ভিতরে স্পেস ব্যবহার করবেন না:
* @csa{netdata publish dnssrp unicast (addr,port)}
* @csa{netdata publish dnssrp unicast (mle)}
ডক্সিজেন বিশেষ কমান্ড
CLI কমান্ড নিম্নলিখিত ডক্সিজেন ALIASES এবং বিশেষ কমান্ড সমর্থন করে:
ALIAS | উদাহরণ | বর্ণনা |
---|---|---|
@cli | @cli বা পোর্ট | কমান্ডের নাম। একটি CLI মন্তব্য ব্লক শুরু করে। |
@কোড | @কোড বিএ পোর্ট 41953 সম্পন্ন @এন্ডকোড | কমান্ড উদাহরণ। |
@ca | [@ca{উপসর্গ}] | আদেশের যুক্তি। ঐচ্ছিক আর্গুমেন্টের জন্য বন্ধনী [ ] ব্যবহার করুন। |
@cparam | @cparam joiner discerner @ca{discerner} পরামিতি বিবরণ. | কমান্ড পরামিতি। |
@পার | @পার ঐচ্ছিক CLI বিবরণ। | CLI নির্দিষ্ট অনুচ্ছেদ। |
@csa | @csa{প্রিফিক্স যোগ} | কমান্ড এছাড়াও দেখুন. অন্য কমান্ড লিঙ্ক. |
@সা | @sa otBorderRouterConfig | এছাড়াও দেখুন. একটি API রেফারেন্সের একটি লিঙ্ক তৈরি করে। |
@ওভারভিউ | @ওভারভিউ | OpenThread CLI ওভারভিউ- এর একটি লিঙ্ক তৈরি করে। |
@নেটডেটা | @নেটডেটা | OT CLI এর সাথে নেটওয়ার্ক ডেটা প্রদর্শন এবং পরিচালনা করার একটি লিঙ্ক তৈরি করে। |
@ডেটাসেট | @ডেটাসেট | OT CLI এর সাথে ডেটাসেট প্রদর্শন এবং পরিচালনা করার একটি লিঙ্ক তৈরি করে। |
@udp | @udp | OT CLI দিয়ে UDP কার্যকারিতা পরীক্ষা করার জন্য একটি লিঙ্ক তৈরি করে। |
@আরো তথ্য | @moreinfo{@netdata} | একটি রেফারেল লিঙ্ক তৈরি করে। |
@নোট | @নোট গুরুত্বপূর্ণ কলআউট। | একটি নোট কলআউট বক্স তৈরি করে। |
make pretty
স্ক্রিপ্ট দ্বারা ভাঙ্গা লাইন ফিক্সিং
কিছু কোড মন্তব্য, যেমন CLI প্যারামিটার বা কমান্ড আউটপুট, openthread.io রেফারেন্সে সঠিকভাবে রেন্ডার করার জন্য একটি একক লাইনে থাকতে হবে। যাইহোক, make pretty
, যা দীর্ঘ লাইনের জন্য রেন্ডার করা আউটপুটকে ভাঙতে পারে।
লাইন ব্রেক যোগ করে এবং একটি HTML কমেন্ট ট্যাগ দিয়ে তাদের আবদ্ধ করে এই পরিস্থিতির সমাধান করা যেতে পারে, যেমনটি নিচের দুটি উদাহরণে দেখানো হয়েছে।
প্রথম উদাহরণ হল dns resolve
কমান্ড, যা ছয়টি পরামিতি পর্যন্ত নিতে পারে। make pretty
চেক পাস করার সময় ডক্সিজেন ব্যবহার করে সিনট্যাক্স সঠিকভাবে রেন্ডার করার জন্য, প্যারামিটারগুলিকে উৎসের তিনটি লাইনে বিভক্ত করতে হবে:
* @cparam dns resolve @ca{hostname} [@ca{dns-server-IP}] <!--
* --> [@ca{dns-server-port}] [@ca{response-timeout-ms}] <!--
* --> [@ca{max-tx-attempts}] [@ca{recursion-desired-boolean}]
দ্বিতীয় উদাহরণ হল history ipaddr list 5
কমান্ডের আউটপুট। আউটপুট সঠিকভাবে রেন্ডার করার জন্য এবং এখনও make pretty
চেক পাস করার জন্য, পাঁচটি আউটপুট লাইনের প্রতিটিকে দুটি লাইনে বিভক্ত করতে হবে, নিম্নরূপ:
* history ipaddr list 5
* 00:00:20.327 -> event:Removed address:2001:dead:beef:cafe:c4cb:caba:8d55:e30b <!--
* -->prefixlen:64 origin:slaac scope:14 preferred:yes valid:yes rloc:no
* 00:00:59.983 -> event:Added address:2001:dead:beef:cafe:c4cb:caba:8d55:e30b <!--
* -->prefixlen:64 origin:slaac scope:14 preferred:yes valid:yes rloc:no
* 00:01:22.535 -> event:Added address:fd00:0:0:0:0:0:0:1 prefixlen:64 <!--
* -->origin:manual scope:14 preferred:yes valid:yes rloc:no
* 00:02:33.221 -> event:Added address:fdde:ad00:beef:0:0:ff:fe00:fc00 <!--
* -->prefixlen:64 origin:thread scope:3 preferred:no valid:yes rloc:no
* 00:02:33.221 -> event:Added address:fdde:ad00:beef:0:0:ff:fe00:5400 <!--
* -->prefixlen:64 origin:thread scope:3 preferred:no valid:yes rloc:yes
* Done