xap.jsonschema 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. {
  2. "$schema": "http://json-schema.org/draft-07/schema#",
  3. "$id": "qmk.xap.v1",
  4. "title": "XAP Spec",
  5. "definitions": {
  6. "data_type": {
  7. "oneOf": [
  8. {
  9. "enum": [
  10. "bool",
  11. "u8",
  12. "u16",
  13. "u32",
  14. "u64",
  15. "struct",
  16. "string"
  17. ]
  18. },
  19. {
  20. "type": "string",
  21. "pattern": "^u\\d{1,2}\\[\\d{1,2}\\]*$"
  22. }
  23. ]
  24. },
  25. "router_type": {
  26. "enum": [
  27. "command",
  28. "router"
  29. ]
  30. },
  31. "permission": {
  32. "enum": [
  33. "secure"
  34. ]
  35. },
  36. "struct": {
  37. "type": "array",
  38. "items": {
  39. "type": "object",
  40. "additionalProperties": false,
  41. "required": [
  42. "name",
  43. "type"
  44. ],
  45. "properties": {
  46. "name": {
  47. "type": "string"
  48. },
  49. "type": {
  50. "type": "string"
  51. }
  52. }
  53. }
  54. },
  55. "route": {
  56. "type": "object",
  57. "propertyNames": {
  58. "$ref": "qmk.definitions.v1#/hex_number_2d"
  59. },
  60. "additionalProperties": {
  61. "type": "object",
  62. "required": [
  63. "type",
  64. "define"
  65. ],
  66. "additionalProperties": false,
  67. "properties": {
  68. "type": {
  69. "$ref": "#/definitions/router_type"
  70. },
  71. "name": {
  72. "type": "string"
  73. },
  74. "description": {
  75. "type": "string"
  76. },
  77. "define": {
  78. "$ref": "qmk.definitions.v1#/define"
  79. },
  80. "permissions": {
  81. "$ref": "#/definitions/permission"
  82. },
  83. "enable_if_preprocessor": {
  84. "type": "string"
  85. },
  86. "request_type": {
  87. "$ref": "#/definitions/data_type"
  88. },
  89. "request_struct_length": {
  90. "type": "number"
  91. },
  92. "request_purpose": {
  93. "type": "string"
  94. },
  95. "return_type": {
  96. "$ref": "#/definitions/data_type"
  97. },
  98. "request_struct_members": {
  99. "$ref": "#definitions/struct"
  100. },
  101. "return_struct_length": {
  102. "type": "number"
  103. },
  104. "return_constant": {
  105. "type": [
  106. "array",
  107. "string"
  108. ]
  109. },
  110. "return_struct_members": {
  111. "$ref": "#definitions/struct"
  112. },
  113. "return_purpose": {
  114. "type": "string"
  115. },
  116. "return_execute": {
  117. "type": "string"
  118. },
  119. "routes": {
  120. "$ref": "#/definitions/route"
  121. }
  122. }
  123. }
  124. }
  125. },
  126. "type": "object",
  127. "additionalProperties": false,
  128. "required": [
  129. "version"
  130. ],
  131. "properties": {
  132. "version": {
  133. "$ref": "qmk.definitions.v1#/bcd_version"
  134. },
  135. "define": {
  136. "$ref": "qmk.definitions.v1#/define"
  137. },
  138. "documentation": {
  139. "type": "object",
  140. "properties": {
  141. "order": {
  142. "type": "array",
  143. "items": {
  144. "type": "string"
  145. }
  146. }
  147. },
  148. "additionalProperties": {
  149. "type": "string"
  150. }
  151. },
  152. "term_definitions": {
  153. "type": "object",
  154. "additionalProperties": {
  155. "type": "string"
  156. }
  157. },
  158. "type_docs": {
  159. "type": "object",
  160. "additionalProperties": {
  161. "type": "string"
  162. }
  163. },
  164. "type_definitions": {
  165. "type": "object",
  166. "additionalProperties": {
  167. "type": "object",
  168. "additionalProperties": false,
  169. "properties": {
  170. "name": {
  171. "type": "string"
  172. },
  173. "description": {
  174. "type": "string"
  175. },
  176. "type": {
  177. "$ref": "#/definitions/data_type"
  178. },
  179. "struct_length": {
  180. "type": "number"
  181. },
  182. "struct_members": {
  183. "$ref": "#definitions/struct"
  184. }
  185. }
  186. }
  187. },
  188. "response_flags": {
  189. "type": "object",
  190. "additionalProperties": false,
  191. "properties": {
  192. "define_prefix": {
  193. "$ref": "qmk.definitions.v1#/define"
  194. },
  195. "bits": {
  196. "type": "object",
  197. "propertyNames": {
  198. "$ref": "qmk.definitions.v1#/text_unsigned_int"
  199. },
  200. "additionalProperties": {
  201. "type": "object",
  202. "additionalProperties": false,
  203. "properties": {
  204. "name": {
  205. "type": "string"
  206. },
  207. "define": {
  208. "$ref": "qmk.definitions.v1#/define"
  209. },
  210. "description": {
  211. "type": "string"
  212. }
  213. }
  214. }
  215. }
  216. }
  217. },
  218. "broadcast_messages": {
  219. "type": "object",
  220. "additionalProperties": false,
  221. "properties": {
  222. "define_prefix": {
  223. "$ref": "qmk.definitions.v1#/define"
  224. },
  225. "messages": {
  226. "type": "object",
  227. "propertyNames": {
  228. "$ref": "qmk.definitions.v1#/hex_number_2d"
  229. },
  230. "additionalProperties": {
  231. "type": "object",
  232. "additionalProperties": false,
  233. "properties": {
  234. "name": {
  235. "type": "string"
  236. },
  237. "define": {
  238. "$ref": "qmk.definitions.v1#/define"
  239. },
  240. "description": {
  241. "type": "string"
  242. },
  243. "return_type": {
  244. "$ref": "#/definitions/data_type"
  245. }
  246. }
  247. }
  248. }
  249. }
  250. },
  251. "routes": {
  252. "$ref": "#/definitions/route"
  253. }
  254. }
  255. }