From 100cdc3a135f3dc108218d94792fe2f2459adc01 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Mon, 15 Oct 2018 12:49:23 -0700 Subject: [PATCH] Add d868uv address map. --- d868uv-map.h | 580 +++++++++++++++++++++++++++++++++++++++++++++++++++ d868uv.c | 85 ++++++-- 2 files changed, 646 insertions(+), 19 deletions(-) create mode 100644 d868uv-map.h diff --git a/d868uv-map.h b/d868uv-map.h new file mode 100644 index 0000000..db7fe29 --- /dev/null +++ b/d868uv-map.h @@ -0,0 +1,580 @@ +/* + * Address map of D868UV memory space. + */ +{ 0x02fa0010, 0x40 }, // Radio name and timestamp +{ 0x00800000, 0x2000 }, // Channels 1-128 +{ 0x00840000, 0x2000 }, // Channels 129-256 +{ 0x00880000, 0x2000 }, // Channels 257-384 +{ 0x008c0000, 0x2000 }, // Channels 385-512 +{ 0x00900000, 0x2000 }, // Channels 513-640 +{ 0x00940000, 0x2000 }, // Channels 641-768 +{ 0x00980000, 0x2000 }, // Channels 769-896 +{ 0x009c0000, 0x2000 }, // Channels 897-1024 +{ 0x00a00000, 0x2000 }, // Channels 1025-1152 +{ 0x00a40000, 0x2000 }, // Channels 1153-1280 +{ 0x00a80000, 0x2000 }, // Channels 1281-1408 +{ 0x00ac0000, 0x2000 }, // Channels 1409-1536 +{ 0x00b00000, 0x2000 }, // Channels 1537-1664 +{ 0x00b40000, 0x2000 }, // Channels 1665-1792 +{ 0x00b80000, 0x2000 }, // Channels 1793-1920 +{ 0x00bc0000, 0x2000 }, // Channels 1921-2048 +{ 0x00c00000, 0x2000 }, // Channels 2049-2176 +{ 0x00c40000, 0x2000 }, // Channels 2177-2304 +{ 0x00c80000, 0x2000 }, // Channels 2305-2432 +{ 0x00cc0000, 0x2000 }, // Channels 2433-2560 +{ 0x00d00000, 0x2000 }, // Channels 2561-2688 +{ 0x00d40000, 0x2000 }, // Channels 2689-2816 +{ 0x00d80000, 0x2000 }, // Channels 2817-2944 +{ 0x00dc0000, 0x2000 }, // Channels 2945-3072 +{ 0x00e00000, 0x2000 }, // Channels 3073-3200 +{ 0x00e40000, 0x2000 }, // Channels 3201-3328 +{ 0x00e80000, 0x2000 }, // Channels 3329-3456 +{ 0x00ec0000, 0x2000 }, // Channels 3457-3584 +{ 0x00f00000, 0x2000 }, // Channels 3585-3712 +{ 0x00f40000, 0x2000 }, // Channels 3713-3840 +{ 0x00f80000, 0x2000 }, // Channels 3841-3968 +{ 0x00fc0000, 0x0880 }, // Channels 3969-4000, VFO A, VFO B +{ 0x01000000, 0x1f400 }, // Channel bitmaps? +{ 0x01080000, 0xc0 }, // Scanlist 1 +{ 0x01080200, 0xc0 }, // Scanlist 2 +{ 0x01080400, 0xc0 }, // Scanlist 3 +{ 0x01080600, 0xc0 }, // Scanlist 4 +{ 0x01080800, 0xc0 }, // Scanlist 5 +{ 0x01080a00, 0xc0 }, // Scanlist 6 +{ 0x01080c00, 0xc0 }, // Scanlist 7 +{ 0x01080e00, 0xc0 }, // Scanlist 8 +{ 0x01081000, 0xc0 }, // Scanlist 9 +{ 0x01081200, 0xc0 }, // Scanlist 10 +{ 0x01081400, 0xc0 }, // Scanlist 11 +{ 0x01081600, 0xc0 }, // Scanlist 12 +{ 0x01081800, 0xc0 }, // Scanlist 13 +{ 0x01081a00, 0xc0 }, // Scanlist 14 +{ 0x01081c00, 0xc0 }, // Scanlist 15 +{ 0x01081e00, 0xc0 }, // Scanlist 16 +{ 0x010c0000, 0xc0 }, // Scanlist 17 +{ 0x010c0200, 0xc0 }, // Scanlist 18 +{ 0x010c0400, 0xc0 }, // Scanlist 19 +{ 0x010c0600, 0xc0 }, // Scanlist 20 +{ 0x010c0800, 0xc0 }, // Scanlist 21 +{ 0x010c0a00, 0xc0 }, // Scanlist 22 +{ 0x010c0c00, 0xc0 }, // Scanlist 23 +{ 0x010c0e00, 0xc0 }, // Scanlist 24 +{ 0x010c1000, 0xc0 }, // Scanlist 25 +{ 0x010c1200, 0xc0 }, // Scanlist 26 +{ 0x010c1400, 0xc0 }, // Scanlist 27 +{ 0x010c1600, 0xc0 }, // Scanlist 28 +{ 0x010c1800, 0xc0 }, // Scanlist 29 +{ 0x010c1a00, 0xc0 }, // Scanlist 30 +{ 0x010c1c00, 0xc0 }, // Scanlist 31 +{ 0x010c1e00, 0xc0 }, // Scanlist 32 +{ 0x01100000, 0xc0 }, // Scanlist 33 +{ 0x01100200, 0xc0 }, // Scanlist 34 +{ 0x01100400, 0xc0 }, // Scanlist 35 +{ 0x01100600, 0xc0 }, // Scanlist 36 +{ 0x01100800, 0xc0 }, // Scanlist 37 +{ 0x01100a00, 0xc0 }, // Scanlist 38 +{ 0x01100c00, 0xc0 }, // Scanlist 39 +{ 0x01100e00, 0xc0 }, // Scanlist 40 +{ 0x01101000, 0xc0 }, // Scanlist 41 +{ 0x01101200, 0xc0 }, // Scanlist 42 +{ 0x01101400, 0xc0 }, // Scanlist 43 +{ 0x01101600, 0xc0 }, // Scanlist 44 +{ 0x01101800, 0xc0 }, // Scanlist 45 +{ 0x01101a00, 0xc0 }, // Scanlist 46 +{ 0x01101c00, 0xc0 }, // Scanlist 47 +{ 0x01101e00, 0xc0 }, // Scanlist 48 +{ 0x01140000, 0xc0 }, // Scanlist 49 +{ 0x01140200, 0xc0 }, // Scanlist 50 +{ 0x01140400, 0xc0 }, // Scanlist 51 +{ 0x01140600, 0xc0 }, // Scanlist 52 +{ 0x01140800, 0xc0 }, // Scanlist 53 +{ 0x01140a00, 0xc0 }, // Scanlist 54 +{ 0x01140c00, 0xc0 }, // Scanlist 55 +{ 0x01140e00, 0xc0 }, // Scanlist 56 +{ 0x01141000, 0xc0 }, // Scanlist 57 +{ 0x01141200, 0xc0 }, // Scanlist 58 +{ 0x01141400, 0xc0 }, // Scanlist 59 +{ 0x01141600, 0xc0 }, // Scanlist 60 +{ 0x01141800, 0xc0 }, // Scanlist 61 +{ 0x01141a00, 0xc0 }, // Scanlist 62 +{ 0x01141c00, 0xc0 }, // Scanlist 63 +{ 0x01141e00, 0xc0 }, // Scanlist 64 +{ 0x01180000, 0xc0 }, // Scanlist 65 +{ 0x01180200, 0xc0 }, // Scanlist 66 +{ 0x01180400, 0xc0 }, // Scanlist 67 +{ 0x01180600, 0xc0 }, // Scanlist 68 +{ 0x01180800, 0xc0 }, // Scanlist 69 +{ 0x01180a00, 0xc0 }, // Scanlist 70 +{ 0x01180c00, 0xc0 }, // Scanlist 71 +{ 0x01180e00, 0xc0 }, // Scanlist 72 +{ 0x01181000, 0xc0 }, // Scanlist 73 +{ 0x01181200, 0xc0 }, // Scanlist 74 +{ 0x01181400, 0xc0 }, // Scanlist 75 +{ 0x01181600, 0xc0 }, // Scanlist 76 +{ 0x01181800, 0xc0 }, // Scanlist 77 +{ 0x01181a00, 0xc0 }, // Scanlist 78 +{ 0x01181c00, 0xc0 }, // Scanlist 79 +{ 0x01181e00, 0xc0 }, // Scanlist 80 +{ 0x011c0000, 0xc0 }, // Scanlist 81 +{ 0x011c0200, 0xc0 }, // Scanlist 82 +{ 0x011c0400, 0xc0 }, // Scanlist 83 +{ 0x011c0600, 0xc0 }, // Scanlist 84 +{ 0x011c0800, 0xc0 }, // Scanlist 85 +{ 0x011c0a00, 0xc0 }, // Scanlist 86 +{ 0x011c0c00, 0xc0 }, // Scanlist 87 +{ 0x011c0e00, 0xc0 }, // Scanlist 88 +{ 0x011c1000, 0xc0 }, // Scanlist 89 +{ 0x011c1200, 0xc0 }, // Scanlist 90 +{ 0x011c1400, 0xc0 }, // Scanlist 91 +{ 0x011c1600, 0xc0 }, // Scanlist 92 +{ 0x011c1800, 0xc0 }, // Scanlist 93 +{ 0x011c1a00, 0xc0 }, // Scanlist 94 +{ 0x011c1c00, 0xc0 }, // Scanlist 95 +{ 0x011c1e00, 0xc0 }, // Scanlist 96 +{ 0x01200000, 0xc0 }, // Scanlist 97 +{ 0x01200200, 0xc0 }, // Scanlist 98 +{ 0x01200400, 0xc0 }, // Scanlist 99 +{ 0x01200600, 0xc0 }, // Scanlist 100 +{ 0x01200800, 0xc0 }, // Scanlist 101 +{ 0x01200a00, 0xc0 }, // Scanlist 102 +{ 0x01200c00, 0xc0 }, // Scanlist 103 +{ 0x01200e00, 0xc0 }, // Scanlist 104 +{ 0x01201000, 0xc0 }, // Scanlist 105 +{ 0x01201200, 0xc0 }, // Scanlist 106 +{ 0x01201400, 0xc0 }, // Scanlist 107 +{ 0x01201600, 0xc0 }, // Scanlist 108 +{ 0x01201800, 0xc0 }, // Scanlist 109 +{ 0x01201a00, 0xc0 }, // Scanlist 110 +{ 0x01201c00, 0xc0 }, // Scanlist 111 +{ 0x01201e00, 0xc0 }, // Scanlist 112 +{ 0x01240000, 0xc0 }, // Scanlist 113 +{ 0x01240200, 0xc0 }, // Scanlist 114 +{ 0x01240400, 0xc0 }, // Scanlist 115 +{ 0x01240600, 0xc0 }, // Scanlist 116 +{ 0x01240800, 0xc0 }, // Scanlist 117 +{ 0x01240a00, 0xc0 }, // Scanlist 118 +{ 0x01240c00, 0xc0 }, // Scanlist 119 +{ 0x01240e00, 0xc0 }, // Scanlist 120 +{ 0x01241000, 0xc0 }, // Scanlist 121 +{ 0x01241200, 0xc0 }, // Scanlist 122 +{ 0x01241400, 0xc0 }, // Scanlist 123 +{ 0x01241600, 0xc0 }, // Scanlist 124 +{ 0x01241800, 0xc0 }, // Scanlist 125 +{ 0x01241a00, 0xc0 }, // Scanlist 126 +{ 0x01241c00, 0xc0 }, // Scanlist 127 +{ 0x01241e00, 0xc0 }, // Scanlist 128 +{ 0x01280000, 0xc0 }, // Scanlist 129 +{ 0x01280200, 0xc0 }, // Scanlist 130 +{ 0x01280400, 0xc0 }, // Scanlist 131 +{ 0x01280600, 0xc0 }, // Scanlist 132 +{ 0x01280800, 0xc0 }, // Scanlist 133 +{ 0x01280a00, 0xc0 }, // Scanlist 134 +{ 0x01280c00, 0xc0 }, // Scanlist 135 +{ 0x01280e00, 0xc0 }, // Scanlist 136 +{ 0x01281000, 0xc0 }, // Scanlist 137 +{ 0x01281200, 0xc0 }, // Scanlist 138 +{ 0x01281400, 0xc0 }, // Scanlist 139 +{ 0x01281600, 0xc0 }, // Scanlist 140 +{ 0x01281800, 0xc0 }, // Scanlist 141 +{ 0x01281a00, 0xc0 }, // Scanlist 142 +{ 0x01281c00, 0xc0 }, // Scanlist 143 +{ 0x01281e00, 0xc0 }, // Scanlist 144 +{ 0x012c0000, 0xc0 }, // Scanlist 145 +{ 0x012c0200, 0xc0 }, // Scanlist 146 +{ 0x012c0400, 0xc0 }, // Scanlist 147 +{ 0x012c0600, 0xc0 }, // Scanlist 148 +{ 0x012c0800, 0xc0 }, // Scanlist 149 +{ 0x012c0a00, 0xc0 }, // Scanlist 150 +{ 0x012c0c00, 0xc0 }, // Scanlist 151 +{ 0x012c0e00, 0xc0 }, // Scanlist 152 +{ 0x012c1000, 0xc0 }, // Scanlist 153 +{ 0x012c1200, 0xc0 }, // Scanlist 154 +{ 0x012c1400, 0xc0 }, // Scanlist 155 +{ 0x012c1600, 0xc0 }, // Scanlist 156 +{ 0x012c1800, 0xc0 }, // Scanlist 157 +{ 0x012c1a00, 0xc0 }, // Scanlist 158 +{ 0x012c1c00, 0xc0 }, // Scanlist 159 +{ 0x012c1e00, 0xc0 }, // Scanlist 160 +{ 0x01300000, 0xc0 }, // Scanlist 161 +{ 0x01300200, 0xc0 }, // Scanlist 162 +{ 0x01300400, 0xc0 }, // Scanlist 163 +{ 0x01300600, 0xc0 }, // Scanlist 164 +{ 0x01300800, 0xc0 }, // Scanlist 165 +{ 0x01300a00, 0xc0 }, // Scanlist 166 +{ 0x01300c00, 0xc0 }, // Scanlist 167 +{ 0x01300e00, 0xc0 }, // Scanlist 168 +{ 0x01301000, 0xc0 }, // Scanlist 169 +{ 0x01301200, 0xc0 }, // Scanlist 170 +{ 0x01301400, 0xc0 }, // Scanlist 171 +{ 0x01301600, 0xc0 }, // Scanlist 172 +{ 0x01301800, 0xc0 }, // Scanlist 173 +{ 0x01301a00, 0xc0 }, // Scanlist 174 +{ 0x01301c00, 0xc0 }, // Scanlist 175 +{ 0x01301e00, 0xc0 }, // Scanlist 176 +{ 0x01340000, 0xc0 }, // Scanlist 177 +{ 0x01340200, 0xc0 }, // Scanlist 178 +{ 0x01340400, 0xc0 }, // Scanlist 179 +{ 0x01340600, 0xc0 }, // Scanlist 180 +{ 0x01340800, 0xc0 }, // Scanlist 181 +{ 0x01340a00, 0xc0 }, // Scanlist 182 +{ 0x01340c00, 0xc0 }, // Scanlist 183 +{ 0x01340e00, 0xc0 }, // Scanlist 184 +{ 0x01341000, 0xc0 }, // Scanlist 185 +{ 0x01341200, 0xc0 }, // Scanlist 186 +{ 0x01341400, 0xc0 }, // Scanlist 187 +{ 0x01341600, 0xc0 }, // Scanlist 188 +{ 0x01341800, 0xc0 }, // Scanlist 189 +{ 0x01341a00, 0xc0 }, // Scanlist 190 +{ 0x01341c00, 0xc0 }, // Scanlist 191 +{ 0x01341e00, 0xc0 }, // Scanlist 192 +{ 0x01380000, 0xc0 }, // Scanlist 193 +{ 0x01380200, 0xc0 }, // Scanlist 194 +{ 0x01380400, 0xc0 }, // Scanlist 195 +{ 0x01380600, 0xc0 }, // Scanlist 196 +{ 0x01380800, 0xc0 }, // Scanlist 197 +{ 0x01380a00, 0xc0 }, // Scanlist 198 +{ 0x01380c00, 0xc0 }, // Scanlist 199 +{ 0x01380e00, 0xc0 }, // Scanlist 200 +{ 0x01381000, 0xc0 }, // Scanlist 201 +{ 0x01381200, 0xc0 }, // Scanlist 202 +{ 0x01381400, 0xc0 }, // Scanlist 203 +{ 0x01381600, 0xc0 }, // Scanlist 204 +{ 0x01381800, 0xc0 }, // Scanlist 205 +{ 0x01381a00, 0xc0 }, // Scanlist 206 +{ 0x01381c00, 0xc0 }, // Scanlist 207 +{ 0x01381e00, 0xc0 }, // Scanlist 208 +{ 0x013c0000, 0xc0 }, // Scanlist 209 +{ 0x013c0200, 0xc0 }, // Scanlist 210 +{ 0x013c0400, 0xc0 }, // Scanlist 211 +{ 0x013c0600, 0xc0 }, // Scanlist 212 +{ 0x013c0800, 0xc0 }, // Scanlist 213 +{ 0x013c0a00, 0xc0 }, // Scanlist 214 +{ 0x013c0c00, 0xc0 }, // Scanlist 215 +{ 0x013c0e00, 0xc0 }, // Scanlist 216 +{ 0x013c1000, 0xc0 }, // Scanlist 217 +{ 0x013c1200, 0xc0 }, // Scanlist 218 +{ 0x013c1400, 0xc0 }, // Scanlist 219 +{ 0x013c1600, 0xc0 }, // Scanlist 220 +{ 0x013c1800, 0xc0 }, // Scanlist 221 +{ 0x013c1a00, 0xc0 }, // Scanlist 222 +{ 0x013c1c00, 0xc0 }, // Scanlist 223 +{ 0x013c1e00, 0xc0 }, // Scanlist 224 +{ 0x01400000, 0xc0 }, // Scanlist 225 +{ 0x01400200, 0xc0 }, // Scanlist 226 +{ 0x01400400, 0xc0 }, // Scanlist 227 +{ 0x01400600, 0xc0 }, // Scanlist 228 +{ 0x01400800, 0xc0 }, // Scanlist 229 +{ 0x01400a00, 0xc0 }, // Scanlist 230 +{ 0x01400c00, 0xc0 }, // Scanlist 231 +{ 0x01400e00, 0xc0 }, // Scanlist 232 +{ 0x01401000, 0xc0 }, // Scanlist 233 +{ 0x01401200, 0xc0 }, // Scanlist 234 +{ 0x01401400, 0xc0 }, // Scanlist 235 +{ 0x01401600, 0xc0 }, // Scanlist 236 +{ 0x01401800, 0xc0 }, // Scanlist 237 +{ 0x01401a00, 0xc0 }, // Scanlist 238 +{ 0x01401c00, 0xc0 }, // Scanlist 239 +{ 0x01401e00, 0xc0 }, // Scanlist 240 +{ 0x01440000, 0xc0 }, // Scanlist 241 +{ 0x01440200, 0xc0 }, // Scanlist 242 +{ 0x01440400, 0xc0 }, // Scanlist 243 +{ 0x01440600, 0xc0 }, // Scanlist 244 +{ 0x01440800, 0xc0 }, // Scanlist 245 +{ 0x01440a00, 0xc0 }, // Scanlist 246 +{ 0x01440c00, 0xc0 }, // Scanlist 247 +{ 0x01440e00, 0xc0 }, // Scanlist 248 +{ 0x01441000, 0xc0 }, // Scanlist 249 +{ 0x01441200, 0xc0 }, // Scanlist 250 +{ 0x01640000, 0x640 }, // Unknown index +{ 0x01640800, 0xc0 }, // Zeroes? +{ 0x02140000, 0x800 }, // Messages 1-8 +{ 0x02180000, 0x800 }, // Messages 9-16 +{ 0x021c0000, 0x800 }, // Messages 17-24 +{ 0x02200000, 0x800 }, // Messages 25-32 +{ 0x02240000, 0x800 }, // Messages 33-40 +{ 0x02280000, 0x800 }, // Messages 41-48 +{ 0x022c0000, 0x800 }, // Messages 49-56 +{ 0x02300000, 0x800 }, // Messages 57-64 +{ 0x02340000, 0x800 }, // Messages 65-72 +{ 0x02380000, 0x800 }, // Messages 73-80 +{ 0x023c0000, 0x800 }, // Messages 81-88 +{ 0x02400000, 0x800 }, // Messages 89-96 +{ 0x02440000, 0x400 }, // Messages 97-100 +{ 0x02480000, 0x1c0 }, // Unknown index +{ 0x02480200, 0x40 }, // Unknown bitmap +{ 0x024c0000, 0x40 }, // Unknown data +{ 0x024c0c80, 0x40 }, // Unknown data +{ 0x024c0d00, 0x200 }, // Zeroes? +{ 0x024c1000, 0x140 }, // Unknown data +{ 0x024c1280, 0x40 }, // Unknown data +{ 0x024c1300, 0x80 }, // Unknown data +{ 0x024c1400, 0x80 }, // Unknown data +{ 0x024c1500, 0x240 }, // Unknown data +{ 0x024c1800, 0x500 }, // Zeroes? +{ 0x024c2000, 0x440 }, // Unknown data +{ 0x024c2600, 0x40 }, // Unknown data +{ 0x02500000, 0x640 }, // Unknown data +{ 0x02501000, 0x40 }, // Unknown data +{ 0x02501100, 0x140 }, // GPS message +{ 0x02540000, 0x1f40 }, // Zones 1-250 +{ 0x02580000, 0x1f40 }, // Radio ID 1-250 +{ 0x025c0000, 0x880 }, // Unknown data, status message +{ 0x025c0b00, 0x40 }, // Unknown data +{ 0x02600000, 0x9c40 }, // Unknown data, bitmap +{ 0x02640000, 0x500 }, // Unknown data, bitmap +{ 0x02680000, 0xf4240 }, // Contacts 1-10000 +{ 0x02900000, 0x80 }, // Unknown index +{ 0x02900100, 0x80 }, // Unknown index +{ 0x02940000, 0x180 }, // AnalogContacts 1-128 +{ 0x02980000, 0x140 }, // Grouplist 1 +{ 0x02980200, 0x140 }, // Grouplist 2 +{ 0x02980400, 0x140 }, // Grouplist 3 +{ 0x02980600, 0x140 }, // Grouplist 4 +{ 0x02980800, 0x140 }, // Grouplist 5 +{ 0x02980a00, 0x140 }, // Grouplist 6 +{ 0x02980c00, 0x140 }, // Grouplist 7 +{ 0x02980e00, 0x140 }, // Grouplist 8 +{ 0x02981000, 0x140 }, // Grouplist 9 +{ 0x02981200, 0x140 }, // Grouplist 10 +{ 0x02981400, 0x140 }, // Grouplist 11 +{ 0x02981600, 0x140 }, // Grouplist 12 +{ 0x02981800, 0x140 }, // Grouplist 13 +{ 0x02981a00, 0x140 }, // Grouplist 14 +{ 0x02981c00, 0x140 }, // Grouplist 15 +{ 0x02981e00, 0x140 }, // Grouplist 16 +{ 0x02982000, 0x140 }, // Grouplist 17 +{ 0x02982200, 0x140 }, // Grouplist 18 +{ 0x02982400, 0x140 }, // Grouplist 19 +{ 0x02982600, 0x140 }, // Grouplist 20 +{ 0x02982800, 0x140 }, // Grouplist 21 +{ 0x02982a00, 0x140 }, // Grouplist 22 +{ 0x02982c00, 0x140 }, // Grouplist 23 +{ 0x02982e00, 0x140 }, // Grouplist 24 +{ 0x02983000, 0x140 }, // Grouplist 25 +{ 0x02983200, 0x140 }, // Grouplist 26 +{ 0x02983400, 0x140 }, // Grouplist 27 +{ 0x02983600, 0x140 }, // Grouplist 28 +{ 0x02983800, 0x140 }, // Grouplist 29 +{ 0x02983a00, 0x140 }, // Grouplist 30 +{ 0x02983c00, 0x140 }, // Grouplist 31 +{ 0x02983e00, 0x140 }, // Grouplist 32 +{ 0x02984000, 0x140 }, // Grouplist 33 +{ 0x02984200, 0x140 }, // Grouplist 34 +{ 0x02984400, 0x140 }, // Grouplist 35 +{ 0x02984600, 0x140 }, // Grouplist 36 +{ 0x02984800, 0x140 }, // Grouplist 37 +{ 0x02984a00, 0x140 }, // Grouplist 38 +{ 0x02984c00, 0x140 }, // Grouplist 39 +{ 0x02984e00, 0x140 }, // Grouplist 40 +{ 0x02985000, 0x140 }, // Grouplist 41 +{ 0x02985200, 0x140 }, // Grouplist 42 +{ 0x02985400, 0x140 }, // Grouplist 43 +{ 0x02985600, 0x140 }, // Grouplist 44 +{ 0x02985800, 0x140 }, // Grouplist 45 +{ 0x02985a00, 0x140 }, // Grouplist 46 +{ 0x02985c00, 0x140 }, // Grouplist 47 +{ 0x02985e00, 0x140 }, // Grouplist 48 +{ 0x02986000, 0x140 }, // Grouplist 49 +{ 0x02986200, 0x140 }, // Grouplist 50 +{ 0x02986400, 0x140 }, // Grouplist 51 +{ 0x02986600, 0x140 }, // Grouplist 52 +{ 0x02986800, 0x140 }, // Grouplist 53 +{ 0x02986a00, 0x140 }, // Grouplist 54 +{ 0x02986c00, 0x140 }, // Grouplist 55 +{ 0x02986e00, 0x140 }, // Grouplist 56 +{ 0x02987000, 0x140 }, // Grouplist 57 +{ 0x02987200, 0x140 }, // Grouplist 58 +{ 0x02987400, 0x140 }, // Grouplist 59 +{ 0x02987600, 0x140 }, // Grouplist 60 +{ 0x02987800, 0x140 }, // Grouplist 61 +{ 0x02987a00, 0x140 }, // Grouplist 62 +{ 0x02987c00, 0x140 }, // Grouplist 63 +{ 0x02987e00, 0x140 }, // Grouplist 64 +{ 0x02988000, 0x140 }, // Grouplist 65 +{ 0x02988200, 0x140 }, // Grouplist 66 +{ 0x02988400, 0x140 }, // Grouplist 67 +{ 0x02988600, 0x140 }, // Grouplist 68 +{ 0x02988800, 0x140 }, // Grouplist 69 +{ 0x02988a00, 0x140 }, // Grouplist 70 +{ 0x02988c00, 0x140 }, // Grouplist 71 +{ 0x02988e00, 0x140 }, // Grouplist 72 +{ 0x02989000, 0x140 }, // Grouplist 73 +{ 0x02989200, 0x140 }, // Grouplist 74 +{ 0x02989400, 0x140 }, // Grouplist 75 +{ 0x02989600, 0x140 }, // Grouplist 76 +{ 0x02989800, 0x140 }, // Grouplist 77 +{ 0x02989a00, 0x140 }, // Grouplist 78 +{ 0x02989c00, 0x140 }, // Grouplist 79 +{ 0x02989e00, 0x140 }, // Grouplist 80 +{ 0x0298a000, 0x140 }, // Grouplist 81 +{ 0x0298a200, 0x140 }, // Grouplist 82 +{ 0x0298a400, 0x140 }, // Grouplist 83 +{ 0x0298a600, 0x140 }, // Grouplist 84 +{ 0x0298a800, 0x140 }, // Grouplist 85 +{ 0x0298aa00, 0x140 }, // Grouplist 86 +{ 0x0298ac00, 0x140 }, // Grouplist 87 +{ 0x0298ae00, 0x140 }, // Grouplist 88 +{ 0x0298b000, 0x140 }, // Grouplist 89 +{ 0x0298b200, 0x140 }, // Grouplist 90 +{ 0x0298b400, 0x140 }, // Grouplist 91 +{ 0x0298b600, 0x140 }, // Grouplist 92 +{ 0x0298b800, 0x140 }, // Grouplist 93 +{ 0x0298ba00, 0x140 }, // Grouplist 94 +{ 0x0298bc00, 0x140 }, // Grouplist 95 +{ 0x0298be00, 0x140 }, // Grouplist 96 +{ 0x0298c000, 0x140 }, // Grouplist 97 +{ 0x0298c200, 0x140 }, // Grouplist 98 +{ 0x0298c400, 0x140 }, // Grouplist 99 +{ 0x0298c600, 0x140 }, // Grouplist 100 +{ 0x0298c800, 0x140 }, // Grouplist 101 +{ 0x0298ca00, 0x140 }, // Grouplist 102 +{ 0x0298cc00, 0x140 }, // Grouplist 103 +{ 0x0298ce00, 0x140 }, // Grouplist 104 +{ 0x0298d000, 0x140 }, // Grouplist 105 +{ 0x0298d200, 0x140 }, // Grouplist 106 +{ 0x0298d400, 0x140 }, // Grouplist 107 +{ 0x0298d600, 0x140 }, // Grouplist 108 +{ 0x0298d800, 0x140 }, // Grouplist 109 +{ 0x0298da00, 0x140 }, // Grouplist 110 +{ 0x0298dc00, 0x140 }, // Grouplist 111 +{ 0x0298de00, 0x140 }, // Grouplist 112 +{ 0x0298e000, 0x140 }, // Grouplist 113 +{ 0x0298e200, 0x140 }, // Grouplist 114 +{ 0x0298e400, 0x140 }, // Grouplist 115 +{ 0x0298e600, 0x140 }, // Grouplist 116 +{ 0x0298e800, 0x140 }, // Grouplist 117 +{ 0x0298ea00, 0x140 }, // Grouplist 118 +{ 0x0298ec00, 0x140 }, // Grouplist 119 +{ 0x0298ee00, 0x140 }, // Grouplist 120 +{ 0x0298f000, 0x140 }, // Grouplist 121 +{ 0x0298f200, 0x140 }, // Grouplist 122 +{ 0x0298f400, 0x140 }, // Grouplist 123 +{ 0x0298f600, 0x140 }, // Grouplist 124 +{ 0x0298f800, 0x140 }, // Grouplist 125 +{ 0x0298fa00, 0x140 }, // Grouplist 126 +{ 0x0298fc00, 0x140 }, // Grouplist 127 +{ 0x0298fe00, 0x140 }, // Grouplist 128 +{ 0x02990000, 0x140 }, // Grouplist 129 +{ 0x02990200, 0x140 }, // Grouplist 130 +{ 0x02990400, 0x140 }, // Grouplist 131 +{ 0x02990600, 0x140 }, // Grouplist 132 +{ 0x02990800, 0x140 }, // Grouplist 133 +{ 0x02990a00, 0x140 }, // Grouplist 134 +{ 0x02990c00, 0x140 }, // Grouplist 135 +{ 0x02990e00, 0x140 }, // Grouplist 136 +{ 0x02991000, 0x140 }, // Grouplist 137 +{ 0x02991200, 0x140 }, // Grouplist 138 +{ 0x02991400, 0x140 }, // Grouplist 139 +{ 0x02991600, 0x140 }, // Grouplist 140 +{ 0x02991800, 0x140 }, // Grouplist 141 +{ 0x02991a00, 0x140 }, // Grouplist 142 +{ 0x02991c00, 0x140 }, // Grouplist 143 +{ 0x02991e00, 0x140 }, // Grouplist 144 +{ 0x02992000, 0x140 }, // Grouplist 145 +{ 0x02992200, 0x140 }, // Grouplist 146 +{ 0x02992400, 0x140 }, // Grouplist 147 +{ 0x02992600, 0x140 }, // Grouplist 148 +{ 0x02992800, 0x140 }, // Grouplist 149 +{ 0x02992a00, 0x140 }, // Grouplist 150 +{ 0x02992c00, 0x140 }, // Grouplist 151 +{ 0x02992e00, 0x140 }, // Grouplist 152 +{ 0x02993000, 0x140 }, // Grouplist 153 +{ 0x02993200, 0x140 }, // Grouplist 154 +{ 0x02993400, 0x140 }, // Grouplist 155 +{ 0x02993600, 0x140 }, // Grouplist 156 +{ 0x02993800, 0x140 }, // Grouplist 157 +{ 0x02993a00, 0x140 }, // Grouplist 158 +{ 0x02993c00, 0x140 }, // Grouplist 159 +{ 0x02993e00, 0x140 }, // Grouplist 160 +{ 0x02994000, 0x140 }, // Grouplist 161 +{ 0x02994200, 0x140 }, // Grouplist 162 +{ 0x02994400, 0x140 }, // Grouplist 163 +{ 0x02994600, 0x140 }, // Grouplist 164 +{ 0x02994800, 0x140 }, // Grouplist 165 +{ 0x02994a00, 0x140 }, // Grouplist 166 +{ 0x02994c00, 0x140 }, // Grouplist 167 +{ 0x02994e00, 0x140 }, // Grouplist 168 +{ 0x02995000, 0x140 }, // Grouplist 169 +{ 0x02995200, 0x140 }, // Grouplist 170 +{ 0x02995400, 0x140 }, // Grouplist 171 +{ 0x02995600, 0x140 }, // Grouplist 172 +{ 0x02995800, 0x140 }, // Grouplist 173 +{ 0x02995a00, 0x140 }, // Grouplist 174 +{ 0x02995c00, 0x140 }, // Grouplist 175 +{ 0x02995e00, 0x140 }, // Grouplist 176 +{ 0x02996000, 0x140 }, // Grouplist 177 +{ 0x02996200, 0x140 }, // Grouplist 178 +{ 0x02996400, 0x140 }, // Grouplist 179 +{ 0x02996600, 0x140 }, // Grouplist 180 +{ 0x02996800, 0x140 }, // Grouplist 181 +{ 0x02996a00, 0x140 }, // Grouplist 182 +{ 0x02996c00, 0x140 }, // Grouplist 183 +{ 0x02996e00, 0x140 }, // Grouplist 184 +{ 0x02997000, 0x140 }, // Grouplist 185 +{ 0x02997200, 0x140 }, // Grouplist 186 +{ 0x02997400, 0x140 }, // Grouplist 187 +{ 0x02997600, 0x140 }, // Grouplist 188 +{ 0x02997800, 0x140 }, // Grouplist 189 +{ 0x02997a00, 0x140 }, // Grouplist 190 +{ 0x02997c00, 0x140 }, // Grouplist 191 +{ 0x02997e00, 0x140 }, // Grouplist 192 +{ 0x02998000, 0x140 }, // Grouplist 193 +{ 0x02998200, 0x140 }, // Grouplist 194 +{ 0x02998400, 0x140 }, // Grouplist 195 +{ 0x02998600, 0x140 }, // Grouplist 196 +{ 0x02998800, 0x140 }, // Grouplist 197 +{ 0x02998a00, 0x140 }, // Grouplist 198 +{ 0x02998c00, 0x140 }, // Grouplist 199 +{ 0x02998e00, 0x140 }, // Grouplist 200 +{ 0x02999000, 0x140 }, // Grouplist 201 +{ 0x02999200, 0x140 }, // Grouplist 202 +{ 0x02999400, 0x140 }, // Grouplist 203 +{ 0x02999600, 0x140 }, // Grouplist 204 +{ 0x02999800, 0x140 }, // Grouplist 205 +{ 0x02999a00, 0x140 }, // Grouplist 206 +{ 0x02999c00, 0x140 }, // Grouplist 207 +{ 0x02999e00, 0x140 }, // Grouplist 208 +{ 0x0299a000, 0x140 }, // Grouplist 209 +{ 0x0299a200, 0x140 }, // Grouplist 210 +{ 0x0299a400, 0x140 }, // Grouplist 211 +{ 0x0299a600, 0x140 }, // Grouplist 212 +{ 0x0299a800, 0x140 }, // Grouplist 213 +{ 0x0299aa00, 0x140 }, // Grouplist 214 +{ 0x0299ac00, 0x140 }, // Grouplist 215 +{ 0x0299ae00, 0x140 }, // Grouplist 216 +{ 0x0299b000, 0x140 }, // Grouplist 217 +{ 0x0299b200, 0x140 }, // Grouplist 218 +{ 0x0299b400, 0x140 }, // Grouplist 219 +{ 0x0299b600, 0x140 }, // Grouplist 220 +{ 0x0299b800, 0x140 }, // Grouplist 221 +{ 0x0299ba00, 0x140 }, // Grouplist 222 +{ 0x0299bc00, 0x140 }, // Grouplist 223 +{ 0x0299be00, 0x140 }, // Grouplist 224 +{ 0x0299c000, 0x140 }, // Grouplist 225 +{ 0x0299c200, 0x140 }, // Grouplist 226 +{ 0x0299c400, 0x140 }, // Grouplist 227 +{ 0x0299c600, 0x140 }, // Grouplist 228 +{ 0x0299c800, 0x140 }, // Grouplist 229 +{ 0x0299ca00, 0x140 }, // Grouplist 230 +{ 0x0299cc00, 0x140 }, // Grouplist 231 +{ 0x0299ce00, 0x140 }, // Grouplist 232 +{ 0x0299d000, 0x140 }, // Grouplist 233 +{ 0x0299d200, 0x140 }, // Grouplist 234 +{ 0x0299d400, 0x140 }, // Grouplist 235 +{ 0x0299d600, 0x140 }, // Grouplist 236 +{ 0x0299d800, 0x140 }, // Grouplist 237 +{ 0x0299da00, 0x140 }, // Grouplist 238 +{ 0x0299dc00, 0x140 }, // Grouplist 239 +{ 0x0299de00, 0x140 }, // Grouplist 240 +{ 0x0299e000, 0x140 }, // Grouplist 241 +{ 0x0299e200, 0x140 }, // Grouplist 242 +{ 0x0299e400, 0x140 }, // Grouplist 243 +{ 0x0299e600, 0x140 }, // Grouplist 244 +{ 0x0299e800, 0x140 }, // Grouplist 245 +{ 0x0299ea00, 0x140 }, // Grouplist 246 +{ 0x0299ec00, 0x140 }, // Grouplist 247 +{ 0x0299ee00, 0x140 }, // Grouplist 248 +{ 0x0299f000, 0x140 }, // Grouplist 249 +{ 0x0299f200, 0x140 }, // Grouplist 250 +{ 0x04280000, 0x300 }, // Unknown index +{ 0, 0 }, diff --git a/d868uv.c b/d868uv.c index cb0c1bf..a5cd02b 100644 --- a/d868uv.c +++ b/d868uv.c @@ -41,8 +41,26 @@ #define NSCANL 250 #define NMESSAGES 100 -#define MEMSZ 0x10000 -//#define MEMSZ 0x4300000 +// +// Size of memory image. +// Essentialy a sum of all fragments defined ind868um-map.h. +// +#define MEMSZ 1607296 + +// +// D868UV radio has a huge internal address space, more than 64 Mbytes. +// The configuration data are dispersed over this space. +// Here is a table of fragments: starting address and length. +// We read these fragments and save them into a file continuously. +// +typedef struct { + unsigned address; + unsigned length; +} fragment_t; + +static fragment_t region_map[] = { +#include "d868uv-map.h" +}; // // Print a generic information about the device. @@ -73,17 +91,33 @@ static void d868uv_print_version(radio_device_t *radio, FILE *out) // static void d868uv_download(radio_device_t *radio) { - int addr; + fragment_t *f; + unsigned file_offset = 0; + unsigned last_printed = 0; - for (addr = 0x00000000; addr < MEMSZ; addr += 1024) { - serial_read_region(addr, &radio_mem[addr], 1024); + for (f=region_map; f->length; f++) { + unsigned addr = f->address; + unsigned nbytes = f->length; - ++radio_progress; - if (radio_progress % 32 == 0) { - fprintf(stderr, "#"); - fflush(stderr); + while (nbytes > 0) { + unsigned n = (nbytes > 32*1024) ? 32*1024 : nbytes; + serial_read_region(addr, &radio_mem[file_offset], n); + file_offset += n; + addr += n; + nbytes -= n; + + if (file_offset / (32*1024) != last_printed) { + fprintf(stderr, "#"); + fflush(stderr); + last_printed = file_offset / (32*1024); + } } } + if (file_offset != MEMSZ) { + fprintf(stderr, "\nWrong MEMSZ=%u for D868UV!\n", MEMSZ); + fprintf(stderr, "Should be %u; check d868uv-map.h!\n", file_offset); + exit(-1); + } } // @@ -91,20 +125,33 @@ static void d868uv_download(radio_device_t *radio) // static void d868uv_upload(radio_device_t *radio, int cont_flag) { - //TODO -#if 0 - int bno; + fragment_t *f; + unsigned file_offset = 0; + unsigned last_printed = 0; - for (bno=0; bnolength; f++) { + unsigned addr = f->address; + unsigned nbytes = f->length; - ++radio_progress; - if (radio_progress % 32 == 0) { - fprintf(stderr, "#"); - fflush(stderr); + while (nbytes > 0) { + unsigned n = (nbytes > 32*1024) ? 32*1024 : nbytes; + serial_write_region(addr, &radio_mem[file_offset], n); + file_offset += n; + addr += n; + nbytes -= n; + + if (file_offset / (32*1024) != last_printed) { + fprintf(stderr, "#"); + fflush(stderr); + last_printed = file_offset / (32*1024); + } } } -#endif + if (file_offset != MEMSZ) { + fprintf(stderr, "\nWrong MEMSZ=%u for D868UV!\n", MEMSZ); + fprintf(stderr, "Should be %u; check d868uv-map.h!\n", file_offset); + exit(-1); + } } //