Advertisement
Guest User

Untitled

a guest
May 21st, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.18 KB | None | 0 0
  1. Вашата задача е да напишете инструмент за конфигуриране на bluetooth устройство. Конфигурацията представлява binary файл, който е
  2. разделен на сегменти. Всеки сегмент е с дължина 64 байта. Първите 8 байта са мета информация, а следващите 56 съдържат
  3. същинските данни. Всеки сегемент съдържа различен брой конфигурационни параметри на устройството. Максималният брой сегменти е 64.
  4. Структурата на сегмента изглежда така:
  5.  
  6. Мета информация:
  7. Мета информацията е разделена на две части. Първата част е с дължина 1 байт и показва типа на сегмента (текстови,
  8. цифров, еднобайтов), а следващите 7 байта описват кои параметри се използват и кои не. Всеки бит отговаря за съответната опция(в
  9. смисъла на позиция). Ако например нулевата опция от въпросния сегмент се използва от устройството, то нулевият бит
  10. трябва да бъде 1 (обърнете внимание на индианците). В противен случай, устройството използва стойност по подразбиране и не прочита стойността на полето от конфигурационния файл.
  11.  
  12. Същинска информация:
  13. Втората част от сегмента( останалите 56 байта) биват използвани по различен начин, спрямо типа на сегмента. Съществуват три типа
  14. сегменти: текстови, цифров, еднобайтов. Текстовият тип съдържа думи с максимална дължина 16 символа (16 байта), т.е. максималният
  15. брой думи в такъв тип сегмент е 3. Цифровият сегмент разделя опциите(думите) на 4 байтови числа, т.е. максималният брой опции при него
  16. е 14 (= 56 / 4). Еднобайтовият сегмент разделя опциите на еднобайтови думи. Максималният брой параметри е 56.
  17.  
  18.  
  19. За различните конфигурационни параметри на устройството се използват различни типове сегменти. Това означава, че даден сегмент може
  20. да съдържа смислово различни опции(DEVICE_NAME, ROM_REVISION, etc), но типът им е задължително еднакъв. В този случай типът на
  21. сегмента е текстови.
  22.  
  23.  
  24. Очаква се инструментът да поддържа следните функционалности:
  25.  
  26. ./bk8000l_conf conf.bin -s device_name "DeviceN1" - Стойността на параметъра DEVICE_NAME в конфигурационния файл conf.bin бива
  27. променена на "DeviceN1". Очаква се стойността на бита, отговарящ за конкретния параметър да бъде правилно променена също.
  28. ./bk8000l_conf conf.bin -S device_name "DeviceN1" - Същата функционалност като -s, само че битът, отговарящ за този параметър, не бива
  29. променен.
  30.  
  31. ./bk8000l_conf conf.bin -g device_name - извежда стойността на параметъра device_name, само ако опцията е активирана.
  32. ./bk8000l_conf conf.bin -G device_name - извежда стойността на параметтра device_name, без значение от стойността на бита в
  33. мета частта.
  34.  
  35. ./bk8000l_conf conf.bin -l - извежда списък с всички параметри в конфигурационния файл, които устройството използва.
  36. ./bk8000l_conf conf.bin -L - извежда списък с всички параметри в конфигурационния файл, независимо дали са активирани или не.
  37. ./bk8000l_conf conf.bin -l device_name baudrate - извежда стойностите на подадените параметри, ако устройството ги използва. Броят подадени параметри може да бъде произволен.
  38. ./bk8000l_conf conf.bin -L device_name baudrate - извежда стойностите на подадените параметри, без значение дали устройството ги
  39. използва. Броят на параметрите може да бъде произволен.
  40.  
  41.  
  42. ./bk8000l_conf conf.bin -b device_name 1 - (де)активира подадения параметър - променя битът отговарящ за конкретния
  43. параметър в конфигурационния файл на 1. Другата допустима стойност е 0.
  44.  
  45. ./bk8000l_conf new.bin -c 0 t 1 b 2 t 3 n - създава празен конфигурационен файл със съответните типове сегменти. В този
  46. случай нулев сегмент е текстови тип, първи сегмент еднобайтов тип, втори сегмент текстови тип, трети сегмент цифров тип.
  47.  
  48. ./bk8000l_conf -h - извежда информация, описваща различните фукнционалности, които предоставя инструментът,
  49. както и описание за използването им.
  50.  
  51. Следва списък с всички параметри, позицията, сегментът, в който се намират и допустимите им стойности.
  52.  
  53. parameter; segment; position; valid values
  54.  
  55. device_name; 0; 0; [a-zA-Z0-9_-]
  56. rom_revision; 0; 1; same
  57. serial_number; 0; 2; [A-Z0-9]
  58.  
  59. bd_addr_part0; 1; 0; [A-Z0-9:]
  60. bd_addr_part1; 1; 1; [A-Z0-9:]
  61. bd_pass_part0; 1; 2; [a-z0-9]
  62.  
  63. serial_baudrate; 2; 0; 1200, 2400, 4800, 9600, 19200, 115200
  64. audio_bitrate; 2; 1; 32, 96, 128, 160, 192, 256, 320
  65. sleep_period; 2; 2; 100, 500, 1000, 5000, 10000
  66.  
  67. serial_parity; 3; 0; N, E, O
  68. serial_data_bit; 3; 1; 5, 6, 7, 8
  69. serail_stop_bit; 3; 2; 0, 1
  70.  
  71. bd_pass_part1; 4; 0; [a-z0-9]
  72. rom_checksum_part0; 4; 1; [a-z0-9]
  73. rom_checksum_part1; 4; 3; same
  74.  
  75.  
  76. Следва списък съдържащ пореден номер на сегмените и неговия тип. Тази конфигурация е специфична за конкретно устройство,
  77. за което е задачата. Напишете инструмента с идеята, че тази поредност може да се променя.
  78. id;type
  79.  
  80. 0; text
  81. 1; text
  82. 2; numeric
  83. 3; byte
  84. 4; text
  85.  
  86. Следва списък на различните типове сегменти, идентификаторът им и описание на съхраняваните данни:
  87. 0; text; 16 byte words, NULL terminated
  88. 1; numeric; 4 byte digits
  89. 2: byte; 1 byte digits
  90.  
  91.  
  92. Инструментът трябва да бъде написан на езика С, като се използват системните примитиви за работа с файлове, read, write, etc.
  93. Използването на въшни библиотеки за работа с файлове е непрепоръчително. Очаква се инструментът да валидира подаваните
  94. от потребителя параметри и техните стойности. Можете да приемете, че инструментът няма да бъде използван върху файлове с
  95. невалиден формат. Помислете за различните ситуации, в които се използва инструментът - например подаденият
  96. конфигурационен файл не съществува; подадена е опция -c и конфигурационен файл съществува, но е с друг формат, etc
  97.  
  98. Примерни конфигурации:
  99.  
  100. 0000000: 00e0 0000 0000 0000 4465 7669 6365 5f6e ........Device_n
  101. 0000010: 3100 0000 0000 0000 332e 3432 2e34 2d33 1.......3.42.4-3
  102. 0000020: 2e31 0000 0000 0000 3443 4530 3436 3044 .1......4CE0460D
  103. 0000030: 3047 0000 0000 0000 0000 0000 0000 0000 0G..............
  104.  
  105. Тесктови сегмент, на който и трите параметъра са активирани и са със следните стойност:
  106. Device_n1 - device_name
  107. 3.42.4-3.1 - rom_revision
  108. 4CE0460D0G - serial_number
  109.  
  110.  
  111. 0000000: 01a0 0000 0000 0000 8025 0000 e803 0000 .........%......
  112. 0000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  113. 0000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  114. 0000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  115.  
  116. Цифров сегмент, чиито параметри са:
  117. 9600 - serial_baudrate
  118. 160 - audio_bitrate
  119. 1000 - sleep_period
  120.  
  121. Като само serial_baudrate и sleep_period са активирани
  122.  
  123.  
  124. 00000000: 02e0 0000 0000 0000 4507 0100 0000 0000 ........E.......
  125. 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  126. 00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  127. 00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
  128.  
  129. Еднобайтов сегмент, чиито параметри са:
  130. 'E' - serial_parity
  131. 7 - serial_data_bit
  132. 1 - serial_stop_bit
  133.  
  134. Като и трите параметъра са активирани.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement