重新理解URI的用法
在设备开通配置阶段,为了能够识别不同设备独特的资源,这里的资源可以暂时理解成它拥有不同于其他设备的模型,公匙,输入输出等,我们需要一个字符串来标识它,为了做到在蓝牙通讯这个范围内的通用性,其他的设备看到这个标识符的时候能够认识它, 解析它,采用了统一资源标识符的概念
统一资源标识符是SIG专门定义的一个字符串,被称为一个代码点,也就是说它由多个
unicode构成,用这样的一个专门定义的字符串去表示另外的一个字符串,比如一个统一资源标识符的例子:
#define URI_SCHEME_EXAMPLE "\xb9" /**< URI Scheme code point for "example:". */
这里的"\xb9"就是所有的蓝牙设备都能解析的一个统一资源标识符,它被翻译成"example:".
当我们需要一个字符串来标识设备的资源的时候,这个字符串其实是有两个部分构成的:统一资源标识符 + 作为参数的字符串
举个例子:
一个灯,在nordic的例子中,想用一个字符串来标识它,
“example:URI for LS Client exampl”, 那么,为了能够让其他设备能够解析它,我们通常不会把这个字符串发出去,而是变换成:"\xb9"“URI for LS Client exampl”
任意长度的字符串都可以变换成4个字节的hash值,这样就把unprovisioned beacon的字节数固定下来了
当接收设备,比如provisioner收到beacon,并把hash值变换回对应的字符串,根据字符串中的"\xb9",就能解析这是一个作为例子的设备,后面的字符串就是这个设备的标识符
因此,当provisioner知道这个是一个client的设备的时候,而且这个设备中仅仅有一个onoff client模型的时候,就可以根据onoff模型的ID对这个模型进行配置,根据我们期望的那样的配置方式来配置它
这就是URI在设备provision时的应用
结论:
在mesh1.0中,unprovisoned beacon中引入URI字段,其主要的目的是为了能够对千差万别的设备实现配置,以实现互操作性
因为设备都具有不同的资源特点,可以采用不同的统一资源标识符进行标识
所谓的资源,可以理解成不同的设备中部署了不同的模型 ,这是其中的一个意思,还有别的意思,有待进一步的理解
正是因为统一资源标识符中,有了标准的代码点,所以,provisioner中可以根据这个代码点去对设备进行配置,这是一个标准的处理程序,可以确保各个厂家设备的兼容性
完成了设备的配置,URI信息就没有用了。