blob: eff2bff3ae881b1812c2c5015400400eac6d7656 [file] [log] [blame]
{{>copyright comment="//"}}
#ifndef {{screaming_snake_case PROJECT_PATH}}_{{screaming_snake_case PROJECT_NAME}}_H_
#define {{screaming_snake_case PROJECT_PATH}}_{{screaming_snake_case PROJECT_NAME}}_H_
#include <lib/inspect/cpp/inspect.h>
#include <ddktl/device.h>
namespace {{snake_case PROJECT_NAME}} {
class {{pascal_case PROJECT_NAME}};
using DeviceType = ddk::Device<{{pascal_case PROJECT_NAME}}, ddk::Initializable, ddk::Unbindable>;
class {{pascal_case PROJECT_NAME}} : public DeviceType {
public:
explicit {{pascal_case PROJECT_NAME}}(zx_device_t* parent) : DeviceType(parent) {}
virtual ~{{pascal_case PROJECT_NAME}}() = default;
static zx_status_t Bind(void* ctx, zx_device_t* dev);
zx_status_t Bind();
void DdkInit(ddk::InitTxn txn);
void DdkUnbind(ddk::UnbindTxn txn);
void DdkRelease();
// For inspect test.
zx::vmo inspect_vmo() { return inspect_.DuplicateVmo(); }
private:
inspect::Inspector inspect_;
// TODO: `is_bound` is an example property. Replace this with useful properties of the device.
inspect::BoolProperty is_bound = inspect_.GetRoot().CreateBool("is_bound", false);
};
} // namespace {{snake_case PROJECT_NAME}}
#endif // {{screaming_snake_case PROJECT_PATH}}_{{screaming_snake_case PROJECT_NAME}}_H_