Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cmdの返り値の表現力を増やしたい!! #376

Closed
meltingrabbit opened this issue Jul 13, 2022 · 3 comments · Fixed by #426
Closed

Cmdの返り値の表現力を増やしたい!! #376

meltingrabbit opened this issue Jul 13, 2022 · 3 comments · Fixed by #426
Assignees
Labels
enhancement New feature or request help wanted Extra attention is needed priority::high priorityg high

Comments

@meltingrabbit
Copy link
Collaborator

meltingrabbit commented Jul 13, 2022

概要

Cmdの返り値の表現力を増やしたい!!

詳細

  • Cmdの返り値の表現力がとぼしすぎて,色々と不都合
    • Cmd_FLASH_WRITE みたいなコマンドを以下で即時実行した場合など,詳しい状況(IO errなのかtime outなのか,とか)はCmdの返り値からは判断できない
    • /**
      * @brief Realtime command を生成し,即時実行する
      * @note RTC のキューに登録する場合は `CCP_register_rtc` を使用
      * @note 生成される command は RTC だが,キューイングされずに即時実行されるため RTC Dispatcher にはログは残らない
      * @param[in] cmd_id: CMD_CODE
      * @param[in] param: パラメタ
      * @param[in] len: パラメタ長
      * @retval CCP_EXEC_PACKET_FMT_ERR: 引数が不正なとき
      * @retval それ以外: PH_dispatch_command の返り値
      */
      CCP_EXEC_STS CCP_form_and_exec_rtc(CMD_CODE cmd_id, const uint8_t* param, uint16_t len);
  • 一方で,統一的なインターフェースにしないと,Cmdが抽象化できない
    • 今はこれを返す
    • /**
      * @enum CCP_EXEC_STS
      * @brief コマンド実行結果コード
      * @note uint8_t を想定
      */
      typedef enum
      {
      CCP_EXEC_SUCCESS = 0, /*!< コマンド実行成功
      なお,コマンドの実行の結果なので,その後の処理が失敗しても,コマンドが実行されていればこれを返す */
      CCP_EXEC_ILLEGAL_LENGTH, //!< コマンド実行時のコマンド引数長エラー
      CCP_EXEC_ILLEGAL_PARAMETER, //!< コマンド実行時のパラメタエラー
      CCP_EXEC_ILLEGAL_CONTEXT, //!< コマンド実行時のその他のエラー
      CCP_EXEC_CMD_NOT_DEFINED, //!< cmdExec で用いる
      CCP_EXEC_ROUTING_FAILED, //!< command router で用いる
      CCP_EXEC_PACKET_FMT_ERR, //!< packet handler, ccp util で用いる
      CCP_EXEC_UNKNOWN //!< 内部処理用.使わない.
      } CCP_EXEC_STS;
  • C2Aの歴史を振り返ると,
    • 当初:
      • 負数: CCP_EXEC_STS
      • 正数: Cmdごとに任意
    • だったが,CmdはCDH以外も実装する上で,返り値がごちゃごちゃになり破滅した
      • Cmd呼び出し部分のロジックを改善するなどでも対処はした
    • その後,Cmdの返り値は CCP_EXEC_STS のみに制限され,ユーザー定義返り値はなくなった
  • 2022/07/13現在の鈴本の気持ちとして,やっぱCmdごとのエラーコードを返したい!!
typedef struct
{
  CCP_EXEC_STS sts;
  uint32_t err_code;
} CCP_CmdRet

CCP_CmdRet Cmd_HOGE(const CommonCmdPacket* packet)
{
  ...
  return (CCP_CmdRet){CCP_EXEC_SUCCESS, 10};
}
  • 案の問題点
    • 複合リテラルがC99以降でしかつかえない!!!
  • じゃあ...以下かしらねぇ...
CCP_CmdRet Cmd_HOGE(const CommonCmdPacket* packet)
{
  ...
  return CCP_make_ccp_ret(CCP_EXEC_SUCCESS, 10);
}

close条件

どうするか方針決めて,実装したら

@meltingrabbit meltingrabbit added enhancement New feature or request help wanted Extra attention is needed priority::high priorityg high labels Jul 13, 2022
@meltingrabbit meltingrabbit self-assigned this Jul 13, 2022
@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Jul 20, 2022

波及効果

これが実現し,各App間でのincludeがなくなると,Appが疎結合になり,Appのインストールなどができるようになる.

こうなると,各AppはGlobal 関数を公開するのをやめ,App間の処理はCmd経由にできる.

@meltingrabbit
Copy link
Collaborator Author

これなおしたら,ついでに Cmd 実行系の Eevent Log も直さないとな

@meltingrabbit
Copy link
Collaborator Author

あと divided_cmd_utility も直さないとだめ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed priority::high priorityg high
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant