-
Notifications
You must be signed in to change notification settings - Fork 194
/
base.h
289 lines (242 loc) · 9.22 KB
/
base.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
/*
* This file is part of the Bus Pirate project (http://code.google.com/p/the-bus-pirate/).
*
* Written and maintained by the Bus Pirate project.
*
* To the extent possible under law, the project has
* waived all copyright and related or neighboring rights to Bus Pirate. This
* work is published from United States.
*
* For details see: http://creativecommons.org/publicdomain/zero/1.0/.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef BASE
#define BASE
#include <p24Fxxxx.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//typedef unsigned char u8;
//typedef unsigned int u16;
//typedef unsigned long u32;
//typedef unsigned char BYTE;
#define FALSE 0
#define TRUE (!FALSE)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////// [ BUS PIRATE SETTINGS ] ////////////////////////////////////////////////////
/////////// NOTE:
/////////// Configuration and Settings for building the Bus Pirate firmware. For more information and support
/////////// On building your own firmware. Please visit the forums on DangerousPrototypes.com. Enjoy the BP :)
///////////
/////////// Bus Pirate - Brought to you by DangerousPrototypes.com
///////////////////////////////////////
// HARDWARE VERSION
// NOW DEFINED IN COMPILER COMMAND FOR
// EASIER COMPILING ON THE CI SERVER
// UNCOMMENT AND USE THESE DEFINES IF YOU'D PREFER
//#if defined(__PIC24FJ256GB106__) //v4 chip
// #define BUSPIRATEV4
//#elif defined(__PIC24FJ64GA002__) //v5/v3/v2go/v1a chip
// // Uncomment the hardware version you are building for
// //#define BUSPIRATEV3 // V3 is also V2G0
// #define BUSPIRATEV5 // V5 is v3.9 with hardware updates that need own firmware build
//#endif
////////////////////////////////////////
// FIRMWARE VERSION STRING
// Build Firmware Version String
// used in 'i' and startup
#define BP_FIRMWARE_STRING "Firmware v8.0 rxxxx "
////////////////////////////////////////
// LANGUAGE
// Select language (US AND DE Currently Supported)
// If you know anyone bi-le
#define LANGUAGE_EN_US
//#define LANGUAGE_DE_DE
//#define LANGUAGE_IT_IT //Not yet supported
//#define LANGUAGE_ES_ES //Not yet supported
////////////////////////////////////////
// MODE SELECTION
// Default Mode Selection
// BP_MAIN is the default mode setting; varys by hardware version
// BP_ADDONS is for special builds with special modes
// BP_CUSTOM is for selecting your own modes below (find: BP_CUSTOM) and uncomment wanted modes
#define BP_MAIN
//#define BP_ADDONS
//#define BP_CUSTOM
////////////////////////////////////////
// OTHER CONFIGS
// BP_ENABLE_HISTORY = Enable the 'h' command for whatever reason it was disabled this enables it. can be disabled again.
// These settings should be left within the BUSPIRATEV4 define due to lack of space on v3. Unless you disable a mode or two
// for a custom v3 build, only include the following options on a v4 build.
#if defined(BUSPIRATEV4)
// Enables the 'h' command to show history
#define BP_ENABLE_HISTORY
#endif
///////////////////////
///////////////////////////// [ END OF CONFIGURATION ]//////////////////
////////////////////////////////////////////////////////////
/////////////////////////////////////
#ifdef BUSPIRATEV4
#include "hardwarev4a.h"
#include "dp_usb/usb_stack_globals.h"
#include "onboardEEPROM.h"
#elif defined(BUSPIRATEV3)
#define BUSPIRATEV2 //v25 (2go) and v3 are about the same, enable the same featue set for both
#include "hardwarev3.h"
#elif defined(BUSPIRATEV5)
#define BUSPIRATEV2 //v25 (2go) and v5 are about the same, enable the same featue set for both
#include "hardwarev5.h"
#else
#error "No hardware defined in base.h."
#endif
#include "baseIO.h"
#include "baseUI.h"
//include/exclude modules here
// standard protocols
//#define BP_USE_RAW2WIRE
//#define BP_USE_RAW3WIRE
//Debugging mode for BPv4, comment out for normal compiling
//Adds alternative communicaton to UART1 over AUX1 and AUX2 instead of USB.
//#define BPV4_DEBUG
#if defined(BP_MAIN)
#define BP_USE_1WIRE
//#ifndef BUSPIRATEV4
#define BP_USE_HWUART //hardware uart (now also MIDI)
//#endif
#define BP_USE_I2C
#define BP_USE_I2C_HW
#define BP_USE_HWSPI //hardware spi
#define BP_USE_RAW2WIRE
#define BP_USE_RAW3WIRE
#define BP_USE_LCD // include HD44780 LCD library
#define BP_USE_BASIC
#if defined(BUSPIRATEV4)
#define BP_USE_DIO //binary mode
#define BP_USE_PCATKB
#define BP_USE_PIC
#endif
#elif defined(BP_ADDONS)
// most used protos
//#define BP_USE_1WIRE
//#define BP_USE_HWUART //hardware uart (now also MIDI)
//#define BP_USE_I2C
//#define BP_USE_I2C_HW
//#define BP_USE_HWSPI //hardware spi
#define BP_USE_RAW2WIRE
#define BP_USE_RAW3WIRE
#define BP_USE_PCATKB
#define BP_USE_LCD // include HD44780 LCD library
#define BP_USE_PIC
#define BP_USE_DIO //binary mode
#elif defined(BP_CUSTOM)
// most used protos
//#define BP_USE_1WIRE
#define BP_USE_HWUART //hardware uart (now also MIDI)
//#define BP_USE_I2C
//#define BP_USE_I2C_HW
//#define BP_USE_HWSPI //hardware spi
//#define BP_USE_RAW2WIRE
//#define BP_USE_RAW3WIRE
//#define BP_USE_PCATKB
//#define BP_USE_LCD // include HD44780 LCD library
//#define BP_USE_PIC
//#define BP_USE_DIO //binary mode
#else
#error "No Bus Pirate configuration defined."
#endif
//ENABLE BASIC SCRIPTING
#if defined(BUSPIRATEV4)
#define BP_USE_BASIC // basic subsystem
//#define BP_USE_BASICI2C // use an i2ceeprom for storing
#endif
// only 1 should be uncommented
//#define BASICTEST
//#define BASICTEST_I2C
//#define BASICTEST_UART
//#define BASICTEST_R3W
//#define BASICTEST_PIC10 // program blink a led
//#define BASICTEST_PIC10_2 // read whole pic
//sets the address in the bootloader to jump to on the bootloader command
//must be defined in asm
asm (".equ BLJUMPADDRESS, 0xABF8");
//
//
//
// END CONFIG AREA
//
//
//
//// left out for now
/* my italian and spanish aint that good ;)
#elif defined(LANGUAGE_IT_IT)
#include "translations/it-IT.h"
// #include "translations/en-US.h"
#elif defined(LANGUAGE_ES_ES)
#include "translations/es-ES.h"
*/
// If BUSPIRATEv4 then use the en_US.h otherwise
// use the v3 one. The version3 one does not include
// the modes that the v3 cannot fit. This way we dont
// waste space on strings we wont see.
//
// Also note; the BPV4 project file uses the en_US.s file
// the buspurate v3 uses the other one...
#if defined(BUSPIRATEV4)
#if defined(LANGUAGE_EN_US)
#include "translations/BPv4_en_US.h"
#elif defined(LANGUAGE_DE_DE)
#include "translations/BPv4_de_DE.h"
#else
#error "No language defined in base.h."
#endif
#else
#if defined(LANGUAGE_EN_US)
#include "translations/BPv3_en_US.h"
#elif defined(LANGUAGE_DE_DE)
#include "translations/BPv3_de_DE.h"
#else
#error "No language defined in base.h."
#endif
#endif
//these settings are destroyed between modes.
//this is used to pass stuff from protocol libraries to BP
//for example, allowpullup determines if the P menu is available
//TO DO: add global scratch buffer to setting array for use in
// 1-Wire enumeration, JTAG input buffer, etc...
struct _modeConfig {
unsigned char speed;
unsigned char numbits;
unsigned char buf[16];
unsigned char altAUX : 2; // there are 4 AUX on BUSPIRATEV4
unsigned char periodicService : 1;
unsigned char lsbEN : 1;
unsigned char HiZ : 1;
unsigned char int16 : 1; // 16 bits output?
unsigned char wwr : 1; // write with read
};
struct _command {
unsigned char cmd;
unsigned int num;
unsigned int repeat;
};
unsigned int bpRevByte(unsigned int c);
//reset all peripherals before configuring a new bus protocol
void bpInit(void);
//take an ADC measurement on channel c
unsigned int bpADC(unsigned char c);
//takes a measurement from the ADC probe and prints the result to the user terminal
void bpADCprobe(void);
void bpADCCprobe(void);
//print byte c to the user terminal in the format
// specified by the bpConfig.displayMode setting
void bpRWbyte(unsigned int c, unsigned char direction);
#define bpWbyte(c) bpRWbyte(c,0);
//delays used by many libraries
//void bpDelayMS(const unsigned char delay);
//void bpDelayUS(const unsigned char delay);
void bpDelayMS(int delay);
void bpDelayUS(int delay);
#endif