## SDK开发说明
### SDK UI线程框架
### UI刷新说明
如果在其他线程里面更新UI元素,请使用qmsd_ui_lock和qmsd_ui_unlock进行上锁操作,防止和UI线程相互操作,如果在UI线程内部则可以直接调用API进行更新
```
if (qmsd_gui_lock(portMAX_DELAY) == 0) {
// update ui
qmsd_ui_unlock();
}
```
### DEMO目录说明
### 通知链(notifier)
#### API
目前qmsd_api大多数API都使用了通知链来通知事件。
1. 初始化
```
int qmsd_notifier_init(void)
```
注意:qmsd_mod_init会调用qmsd_notifier_init,进行初始化
2. 反初始化
```
int qmsd_notifier_uninit(void)
```
3. 注册cb
```
int qmsd_notifier_register(struct qmsd_notifier_block *n)
```
4. 注销cb
```
int qmsd_notifier_unregister(struct qmsd_notifier_block *n)
```
5. 不加锁调用(由于目前基本注册cb只有一次,所以建议用这个函数)
```
int qmsd_notifier_call_nolock(unsigned int action, void *v)
```
5. 加锁调用
```
int qmsd_notifier_call(unsigned int action, void *v)
```