Browse Source

initial commit

Thomas B 3 months ago
commit
16b6819c96
7 changed files with 1047 additions and 0 deletions
  1. 4
    0
      .gitignore
  2. 3
    0
      .gitmodules
  3. 1
    0
      README.md
  4. 622
    0
      sensor/Makefile
  5. 386
    0
      sensor/include/usbconfig.h
  6. 30
    0
      sensor/src/main.c
  7. 1
    0
      sensor/v-usb

+ 4
- 0
.gitignore View File

@@ -0,0 +1,4 @@
1
+.directory
2
+
3
+sensor/build
4
+sensor/sensor.*

+ 3
- 0
.gitmodules View File

@@ -0,0 +1,3 @@
1
+[submodule "sensor/v-usb"]
2
+	path = sensor/v-usb
3
+	url = https://github.com/obdev/v-usb

+ 1
- 0
README.md View File

@@ -0,0 +1 @@
1
+# AutoBrightness

+ 622
- 0
sensor/Makefile View File

@@ -0,0 +1,622 @@
1
+# Hey Emacs, this is a -*- makefile -*-
2
+#----------------------------------------------------------------------------
3
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
4
+#
5
+# Released to the Public Domain
6
+#
7
+# Additional material for this makefile was written by:
8
+# Peter Fleury
9
+# Tim Henigan
10
+# Colin O'Flynn
11
+# Reiner Patommel
12
+# Markus Pfaff
13
+# Sander Pool
14
+# Frederik Rouleau
15
+# Carlos Lamas
16
+#
17
+#----------------------------------------------------------------------------
18
+# On command line:
19
+#
20
+# make all = Make software.
21
+#
22
+# make clean = Clean out built project files.
23
+#
24
+# make coff = Convert ELF to AVR COFF.
25
+#
26
+# make extcoff = Convert ELF to AVR Extended COFF.
27
+#
28
+# make program = Download the hex file to the device, using avrdude.
29
+#                Please customize the avrdude settings below first!
30
+#
31
+# make debug = Start either simulavr or avarice as specified for debugging, 
32
+#              with avr-gdb or avr-insight as the front end for debugging.
33
+#
34
+# make filename.s = Just compile filename.c into the assembler code only.
35
+#
36
+# make filename.i = Create a preprocessed source file for use in submitting
37
+#                   bug reports to the GCC project.
38
+#
39
+# To rebuild project do "make clean" then "make all".
40
+#----------------------------------------------------------------------------
41
+
42
+
43
+# MCU name
44
+MCU = attiny85
45
+
46
+# Processor frequency.
47
+#     This will define a symbol, F_CPU, in all source code files equal to the 
48
+#     processor frequency. You can then use this symbol in your source code to 
49
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
50
+#     automatically to create a 32-bit value in your source code.
51
+#     Typical values are:
52
+#         F_CPU =  1000000
53
+#         F_CPU =  1843200
54
+#         F_CPU =  2000000
55
+#         F_CPU =  3686400
56
+#         F_CPU =  4000000
57
+#         F_CPU =  7372800
58
+#         F_CPU =  8000000
59
+#         F_CPU = 11059200
60
+#         F_CPU = 14745600
61
+#         F_CPU = 16000000
62
+#         F_CPU = 18432000
63
+#         F_CPU = 20000000
64
+F_CPU = 16000000
65
+
66
+
67
+# Output format. (can be srec, ihex, binary)
68
+FORMAT = ihex
69
+
70
+
71
+# Target file name (without extension).
72
+TARGET = sensor
73
+
74
+
75
+# Object files directory
76
+#     To put object files in current directory, use a dot (.), do NOT make
77
+#     this an empty or blank macro!
78
+OBJDIR = build
79
+
80
+
81
+# List C source files here. (C dependencies are automatically generated.)
82
+SRC = v-usb/usbdrv/usbdrv.c v-usb/usbdrv/oddebug.c
83
+SRC += src/main.c
84
+
85
+
86
+# List C++ source files here. (C dependencies are automatically generated.)
87
+CPPSRC =
88
+
89
+
90
+# List Assembler source files here.
91
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
92
+#     will not be considered source files but generated files (assembler
93
+#     output from the compiler), and will be deleted upon "make clean"!
94
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
95
+#     it will preserve the spelling of the filenames, and gcc itself does
96
+#     care about how the name is spelled on its command-line.
97
+ASRC = v-usb/usbdrv/usbdrvasm.S
98
+
99
+
100
+# Optimization level, can be [0, 1, 2, 3, s]. 
101
+#     0 = turn off optimization. s = optimize for size.
102
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
103
+OPT = s
104
+
105
+
106
+# Debugging format.
107
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
108
+#     AVR Studio 4.10 requires dwarf-2.
109
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
110
+DEBUG = dwarf-2
111
+
112
+
113
+# List any extra directories to look for include files here.
114
+#     Each directory must be seperated by a space.
115
+#     Use forward slashes for directory separators.
116
+#     For a directory that has spaces, enclose it in quotes.
117
+EXTRAINCDIRS = include v-usb/usbdrv
118
+
119
+
120
+# Compiler flag to set the C Standard level.
121
+#     c89   = "ANSI" C
122
+#     gnu89 = c89 plus GCC extensions
123
+#     c99   = ISO C99 standard (not yet fully implemented)
124
+#     gnu99 = c99 plus GCC extensions
125
+CSTANDARD = -std=gnu99
126
+
127
+
128
+# Place -D or -U options here for C sources
129
+CDEFS = -DF_CPU=$(F_CPU)UL
130
+
131
+
132
+# Place -D or -U options here for ASM sources
133
+ADEFS = -DF_CPU=$(F_CPU)
134
+
135
+
136
+# Place -D or -U options here for C++ sources
137
+CPPDEFS = -DF_CPU=$(F_CPU)UL
138
+#CPPDEFS += -D__STDC_LIMIT_MACROS
139
+#CPPDEFS += -D__STDC_CONSTANT_MACROS
140
+
141
+
142
+DEPDIR = $(OBJDIR)/dependencies
143
+
144
+
145
+#---------------- Compiler Options C ----------------
146
+#  -g*:          generate debugging information
147
+#  -O*:          optimization level
148
+#  -f...:        tuning, see GCC manual and avr-libc documentation
149
+#  -Wall...:     warning level
150
+#  -Wa,...:      tell GCC to pass this to the assembler.
151
+#    -adhlns...: create assembler listing
152
+CFLAGS = -g$(DEBUG)
153
+CFLAGS += $(CDEFS)
154
+CFLAGS += -O$(OPT)
155
+CFLAGS += -funsigned-char
156
+CFLAGS += -funsigned-bitfields
157
+CFLAGS += -fpack-struct
158
+CFLAGS += -fshort-enums
159
+CFLAGS += -Wall
160
+CFLAGS += -Wstrict-prototypes
161
+#CFLAGS += -mshort-calls
162
+#CFLAGS += -fno-unit-at-a-time
163
+#CFLAGS += -Wundef
164
+#CFLAGS += -Wunreachable-code
165
+#CFLAGS += -Wsign-compare
166
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
167
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
168
+CFLAGS += $(CSTANDARD)
169
+
170
+
171
+#---------------- Compiler Options C++ ----------------
172
+#  -g*:          generate debugging information
173
+#  -O*:          optimization level
174
+#  -f...:        tuning, see GCC manual and avr-libc documentation
175
+#  -Wall...:     warning level
176
+#  -Wa,...:      tell GCC to pass this to the assembler.
177
+#    -adhlns...: create assembler listing
178
+CPPFLAGS = -g$(DEBUG)
179
+CPPFLAGS += $(CPPDEFS)
180
+CPPFLAGS += -O$(OPT)
181
+CPPFLAGS += -funsigned-char
182
+CPPFLAGS += -funsigned-bitfields
183
+CPPFLAGS += -fpack-struct
184
+CPPFLAGS += -fshort-enums
185
+CPPFLAGS += -fno-exceptions
186
+CPPFLAGS += -Wall
187
+CPPFLAGS += -Wundef
188
+#CPPFLAGS += -mshort-calls
189
+#CPPFLAGS += -fno-unit-at-a-time
190
+#CPPFLAGS += -Wstrict-prototypes
191
+#CPPFLAGS += -Wunreachable-code
192
+#CPPFLAGS += -Wsign-compare
193
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
194
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
195
+#CPPFLAGS += $(CSTANDARD)
196
+
197
+#---------------- Assembler Options ----------------
198
+#  -Wa,...:   tell GCC to pass this to the assembler.
199
+#  -adhlns:   create listing
200
+#  -gstabs:   have the assembler create line number information; note that
201
+#             for use in COFF files, additional information about filenames
202
+#             and function names needs to be present in the assembler source
203
+#             files -- see avr-libc docs [FIXME: not yet described there]
204
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
205
+#       dump that will be displayed for a given single line of source input.
206
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
207
+ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
208
+
209
+
210
+#---------------- Library Options ----------------
211
+# Minimalistic printf version
212
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
213
+
214
+# Floating point printf version (requires MATH_LIB = -lm below)
215
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
216
+
217
+# If this is left blank, then it will use the Standard printf version.
218
+PRINTF_LIB = 
219
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
220
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
221
+
222
+
223
+# Minimalistic scanf version
224
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
225
+
226
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
227
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
228
+
229
+# If this is left blank, then it will use the Standard scanf version.
230
+SCANF_LIB = 
231
+#SCANF_LIB = $(SCANF_LIB_MIN)
232
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
233
+
234
+
235
+MATH_LIB = -lm
236
+
237
+
238
+# List any extra directories to look for libraries here.
239
+#     Each directory must be seperated by a space.
240
+#     Use forward slashes for directory separators.
241
+#     For a directory that has spaces, enclose it in quotes.
242
+EXTRALIBDIRS = 
243
+
244
+
245
+
246
+#---------------- External Memory Options ----------------
247
+
248
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
249
+# used for variables (.data/.bss) and heap (malloc()).
250
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
251
+
252
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
253
+# only used for heap (malloc()).
254
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
255
+
256
+EXTMEMOPTS =
257
+
258
+
259
+
260
+#---------------- Linker Options ----------------
261
+#  -Wl,...:     tell GCC to pass this to linker.
262
+#    -Map:      create map file
263
+#    --cref:    add cross reference to  map file
264
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
265
+LDFLAGS += $(EXTMEMOPTS)
266
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
267
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
268
+#LDFLAGS += -T linker_script.x
269
+
270
+
271
+
272
+#---------------- Programming Options (avrdude) ----------------
273
+
274
+# Programming hardware
275
+# Type: avrdude -c ?
276
+# to get a full listing.
277
+#
278
+AVRDUDE_PROGRAMMER = avrispmkII
279
+
280
+# com1 = serial port. Use lpt1 to connect to parallel port.
281
+AVRDUDE_PORT = usb    # programmer connected to serial device
282
+
283
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
284
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
285
+
286
+
287
+# Uncomment the following if you want avrdude's erase cycle counter.
288
+# Note that this counter needs to be initialized first using -Yn,
289
+# see avrdude manual.
290
+#AVRDUDE_ERASE_COUNTER = -y
291
+
292
+# Uncomment the following if you do /not/ wish a verification to be
293
+# performed after programming the device.
294
+#AVRDUDE_NO_VERIFY = -V
295
+
296
+# Increase verbosity level.  Please use this when submitting bug
297
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
298
+# to submit bug reports.
299
+#AVRDUDE_VERBOSE = -v -v
300
+
301
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
302
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
303
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
304
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
305
+
306
+
307
+
308
+#---------------- Debugging Options ----------------
309
+
310
+# For simulavr only - target MCU frequency.
311
+DEBUG_MFREQ = $(F_CPU)
312
+
313
+# Set the DEBUG_UI to either gdb or insight.
314
+# DEBUG_UI = gdb
315
+DEBUG_UI = insight
316
+
317
+# Set the debugging back-end to either avarice, simulavr.
318
+DEBUG_BACKEND = avarice
319
+#DEBUG_BACKEND = simulavr
320
+
321
+# GDB Init Filename.
322
+GDBINIT_FILE = __avr_gdbinit
323
+
324
+# When using avarice settings for the JTAG
325
+JTAG_DEV = /dev/com1
326
+
327
+# Debugging port used to communicate between GDB / avarice / simulavr.
328
+DEBUG_PORT = 4242
329
+
330
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
331
+#     just set to localhost unless doing some sort of crazy debugging when 
332
+#     avarice is running on a different computer.
333
+DEBUG_HOST = localhost
334
+
335
+
336
+
337
+#============================================================================
338
+
339
+
340
+# Define programs and commands.
341
+SHELL = sh
342
+CC = avr-gcc
343
+OBJCOPY = avr-objcopy
344
+OBJDUMP = avr-objdump
345
+SIZE = avr-size
346
+AR = avr-ar rcs
347
+NM = avr-nm
348
+AVRDUDE = avrdude
349
+REMOVE = rm -f
350
+REMOVEDIR = rm -rf
351
+COPY = cp
352
+WINSHELL = cmd
353
+
354
+
355
+# Define Messages
356
+# English
357
+MSG_ERRORS_NONE = Errors: none
358
+MSG_BEGIN = -------- begin --------
359
+MSG_END = --------  end  --------
360
+MSG_SIZE_BEFORE = Size before: 
361
+MSG_SIZE_AFTER = Size after:
362
+MSG_COFF = Converting to AVR COFF:
363
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
364
+MSG_FLASH = Creating load file for Flash:
365
+MSG_EEPROM = Creating load file for EEPROM:
366
+MSG_EXTENDED_LISTING = Creating Extended Listing:
367
+MSG_SYMBOL_TABLE = Creating Symbol Table:
368
+MSG_LINKING = Linking:
369
+MSG_COMPILING = Compiling C:
370
+MSG_COMPILING_CPP = Compiling C++:
371
+MSG_ASSEMBLING = Assembling:
372
+MSG_CLEANING = Cleaning project:
373
+MSG_CREATING_LIBRARY = Creating library:
374
+
375
+
376
+
377
+
378
+# Define all object files.
379
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
380
+
381
+# Define all listing files.
382
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
383
+
384
+
385
+# Compiler flags to generate dependency files.
386
+GENDEPFLAGS = -MMD -MP -MF $(DEPDIR)/$(@F).d
387
+
388
+
389
+# Combine all necessary flags and optional flags.
390
+# Add target processor to flags.
391
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
392
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
393
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
394
+
395
+
396
+
397
+
398
+
399
+# Default target.
400
+all: begin gccversion sizebefore build sizeafter end
401
+
402
+# Change the build target to build a HEX file or a library.
403
+build: elf hex eep lss sym
404
+#build: lib
405
+
406
+
407
+elf: $(TARGET).elf
408
+hex: $(TARGET).hex
409
+eep: $(TARGET).eep
410
+lss: $(TARGET).lss
411
+sym: $(TARGET).sym
412
+LIBNAME=lib$(TARGET).a
413
+lib: $(LIBNAME)
414
+
415
+
416
+
417
+# Eye candy.
418
+# AVR Studio 3.x does not check make's exit code but relies on
419
+# the following magic strings to be generated by the compile job.
420
+begin:
421
+	@echo
422
+	@echo $(MSG_BEGIN)
423
+
424
+end:
425
+	@echo $(MSG_END)
426
+	@echo
427
+
428
+
429
+# Display size of file.
430
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
431
+ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
432
+
433
+sizebefore:
434
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
435
+	2>/dev/null; echo; fi
436
+
437
+sizeafter:
438
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
439
+	2>/dev/null; echo; fi
440
+
441
+
442
+
443
+# Display compiler version information.
444
+gccversion : 
445
+	@$(CC) --version
446
+
447
+
448
+
449
+# Program the device.  
450
+program: $(TARGET).hex $(TARGET).eep
451
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
452
+
453
+
454
+# Generate avr-gdb config/init file which does the following:
455
+#     define the reset signal, load the target file, connect to target, and set 
456
+#     a breakpoint at main().
457
+gdb-config: 
458
+	@$(REMOVE) $(GDBINIT_FILE)
459
+	@echo define reset >> $(GDBINIT_FILE)
460
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
461
+	@echo end >> $(GDBINIT_FILE)
462
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
463
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
464
+ifeq ($(DEBUG_BACKEND),simulavr)
465
+	@echo load  >> $(GDBINIT_FILE)
466
+endif
467
+	@echo break main >> $(GDBINIT_FILE)
468
+
469
+debug: gdb-config $(TARGET).elf
470
+ifeq ($(DEBUG_BACKEND), avarice)
471
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
472
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
473
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
474
+	@$(WINSHELL) /c pause
475
+
476
+else
477
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
478
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
479
+endif
480
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
481
+
482
+
483
+
484
+
485
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
486
+COFFCONVERT = $(OBJCOPY) --debugging
487
+COFFCONVERT += --change-section-address .data-0x800000
488
+COFFCONVERT += --change-section-address .bss-0x800000
489
+COFFCONVERT += --change-section-address .noinit-0x800000
490
+COFFCONVERT += --change-section-address .eeprom-0x810000
491
+
492
+
493
+
494
+coff: $(TARGET).elf
495
+	@echo
496
+	@echo $(MSG_COFF) $(TARGET).cof
497
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
498
+
499
+
500
+extcoff: $(TARGET).elf
501
+	@echo
502
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
503
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
504
+
505
+
506
+
507
+# Create final output files (.hex, .eep) from ELF output file.
508
+%.hex: %.elf
509
+	@echo
510
+	@echo $(MSG_FLASH) $@
511
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@
512
+
513
+%.eep: %.elf
514
+	@echo
515
+	@echo $(MSG_EEPROM) $@
516
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
517
+	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
518
+
519
+# Create extended listing file from ELF output file.
520
+%.lss: %.elf
521
+	@echo
522
+	@echo $(MSG_EXTENDED_LISTING) $@
523
+	$(OBJDUMP) -h -S -z $< > $@
524
+
525
+# Create a symbol table from ELF output file.
526
+%.sym: %.elf
527
+	@echo
528
+	@echo $(MSG_SYMBOL_TABLE) $@
529
+	$(NM) -n $< > $@
530
+
531
+
532
+
533
+# Create library from object files.
534
+.SECONDARY : $(TARGET).a
535
+.PRECIOUS : $(OBJ)
536
+%.a: $(OBJ)
537
+	@echo
538
+	@echo $(MSG_CREATING_LIBRARY) $@
539
+	$(AR) $@ $(OBJ)
540
+
541
+
542
+# Link: create ELF output file from object files.
543
+.SECONDARY : $(TARGET).elf
544
+.PRECIOUS : $(OBJ)
545
+%.elf: $(OBJ)
546
+	@echo
547
+	@echo $(MSG_LINKING) $@
548
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
549
+
550
+
551
+# Compile: create object files from C source files.
552
+$(OBJDIR)/%.o : %.c
553
+	@echo
554
+	@echo $(MSG_COMPILING) $<
555
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
556
+
557
+
558
+# Compile: create object files from C++ source files.
559
+$(OBJDIR)/%.o : %.cpp
560
+	@echo
561
+	@echo $(MSG_COMPILING_CPP) $<
562
+	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
563
+
564
+
565
+# Compile: create assembler files from C source files.
566
+%.s : %.c
567
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
568
+
569
+
570
+# Compile: create assembler files from C++ source files.
571
+%.s : %.cpp
572
+	$(CC) -S $(ALL_CPPFLAGS) $< -o $@
573
+
574
+
575
+# Assemble: create object files from assembler source files.
576
+$(OBJDIR)/%.o : %.S
577
+	@echo
578
+	@echo $(MSG_ASSEMBLING) $<
579
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
580
+
581
+
582
+# Create preprocessed source for use in sending a bug report.
583
+%.i : %.c
584
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
585
+
586
+
587
+# Target: clean project.
588
+clean: begin clean_list end
589
+
590
+clean_list :
591
+	@echo
592
+	@echo $(MSG_CLEANING)
593
+	$(REMOVE) $(TARGET).hex
594
+	$(REMOVE) $(TARGET).eep
595
+	$(REMOVE) $(TARGET).cof
596
+	$(REMOVE) $(TARGET).elf
597
+	$(REMOVE) $(TARGET).map
598
+	$(REMOVE) $(TARGET).sym
599
+	$(REMOVE) $(TARGET).lss
600
+	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
601
+	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
602
+	$(REMOVE) $(SRC:.c=.s)
603
+	$(REMOVE) $(SRC:.c=.d)
604
+	$(REMOVE) $(SRC:.c=.i)
605
+	$(REMOVEDIR) $(DEPDIR)
606
+	$(REMOVEDIR) $(OBJDIR)
607
+
608
+
609
+# Create object files directory
610
+$(shell mkdir -p $(OBJDIR) 2>/dev/null)
611
+$(shell mkdir -p $(OBJDIR)/src 2>/dev/null) # TODO not nice
612
+$(shell mkdir -p $(OBJDIR)/v-usb/usbdrv 2>/dev/null) # TODO not nice
613
+
614
+
615
+# Include the dependency files.
616
+-include $(shell mkdir $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*)
617
+
618
+
619
+# Listing of phony targets.
620
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
621
+build elf hex eep lss sym coff extcoff \
622
+clean clean_list program debug gdb-config

+ 386
- 0
sensor/include/usbconfig.h View File

@@ -0,0 +1,386 @@
1
+/* Name: usbconfig.h
2
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
3
+ * Author: Christian Starkjohann
4
+ * Creation Date: 2005-04-01
5
+ * Tabsize: 4
6
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8
+ */
9
+
10
+#ifndef __usbconfig_h_included__
11
+#define __usbconfig_h_included__
12
+
13
+/*
14
+General Description:
15
+This file is an example configuration (with inline documentation) for the USB
16
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
17
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
18
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
19
+other hardware interrupt, as long as it is the highest level interrupt, see
20
+section at the end of this file).
21
++ To create your own usbconfig.h file, copy this file to your project's
22
++ firmware source directory) and rename it to "usbconfig.h".
23
++ Then edit it accordingly.
24
+*/
25
+
26
+/* ---------------------------- Hardware Config ---------------------------- */
27
+
28
+#define USB_CFG_IOPORTNAME      B
29
+/* This is the port where the USB bus is connected. When you configure it to
30
+ * "B", the registers PORTB, PINB and DDRB will be used.
31
+ */
32
+#define USB_CFG_DMINUS_BIT      4
33
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
34
+ * This may be any bit in the port.
35
+ */
36
+#define USB_CFG_DPLUS_BIT       3
37
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
38
+ * This may be any bit in the port. Please note that D+ must also be connected
39
+ * to interrupt pin INT0! [You can also use other interrupts, see section
40
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
41
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
42
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
43
+ * markers every millisecond.]
44
+ */
45
+#define USB_CFG_CLOCK_KHZ       (F_CPU/1000)
46
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
47
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
48
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
49
+ * frequency. All other rates require a precision of 2000 ppm and thus a
50
+ * crystal!
51
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
52
+ * not need to modify this setting.
53
+ */
54
+#define USB_CFG_CHECK_CRC       0
55
+/* Define this to 1 if you want that the driver checks integrity of incoming
56
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
57
+ * currently only available for 18 MHz crystal clock. You must choose
58
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
59
+ */
60
+
61
+/* ----------------------- Optional Hardware Config ------------------------ */
62
+
63
+/* #define USB_CFG_PULLUP_IOPORTNAME   D */
64
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
65
+ * V+, you can connect and disconnect the device from firmware by calling
66
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
67
+ * This constant defines the port on which the pullup resistor is connected.
68
+ */
69
+/* #define USB_CFG_PULLUP_BIT          4 */
70
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
71
+ * above) where the 1.5k pullup resistor is connected. See description
72
+ * above for details.
73
+ */
74
+
75
+/* --------------------------- Functional Range ---------------------------- */
76
+
77
+#define USB_CFG_HAVE_INTRIN_ENDPOINT    0
78
+/* Define this to 1 if you want to compile a version with two endpoints: The
79
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
80
+ * number).
81
+ */
82
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3   0
83
+/* Define this to 1 if you want to compile a version with three endpoints: The
84
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
85
+ * configured below) and a catch-all default interrupt-in endpoint as above.
86
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
87
+ */
88
+#define USB_CFG_EP3_NUMBER              3
89
+/* If the so-called endpoint 3 is used, it can now be configured to any other
90
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
91
+ */
92
+/* #define USB_INITIAL_DATATOKEN           USBPID_DATA1 */
93
+/* The above macro defines the startup condition for data toggling on the
94
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
95
+ * Since the token is toggled BEFORE sending any data, the first packet is
96
+ * sent with the oposite value of this configuration!
97
+ */
98
+#define USB_CFG_IMPLEMENT_HALT          0
99
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
100
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
101
+ * it is required by the standard. We have made it a config option because it
102
+ * bloats the code considerably.
103
+ */
104
+#define USB_CFG_SUPPRESS_INTR_CODE      0
105
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
106
+ * want to send any data over them. If this macro is defined to 1, functions
107
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
108
+ * you need the interrupt-in endpoints in order to comply to an interface
109
+ * (e.g. HID), but never want to send any data. This option saves a couple
110
+ * of bytes in flash memory and the transmit buffers in RAM.
111
+ */
112
+#define USB_CFG_INTR_POLL_INTERVAL      10
113
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
114
+ * interval. The value is in milliseconds and must not be less than 10 ms for
115
+ * low speed devices.
116
+ */
117
+#define USB_CFG_IS_SELF_POWERED         0
118
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
119
+ * device is powered from the USB bus.
120
+ */
121
+#define USB_CFG_MAX_BUS_POWER           100
122
+/* Set this variable to the maximum USB bus power consumption of your device.
123
+ * The value is in milliamperes. [It will be divided by two since USB
124
+ * communicates power requirements in units of 2 mA.]
125
+ */
126
+#define USB_CFG_IMPLEMENT_FN_WRITE      0
127
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
128
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
129
+ * bytes.
130
+ */
131
+#define USB_CFG_IMPLEMENT_FN_READ       0
132
+/* Set this to 1 if you need to send control replies which are generated
133
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
134
+ * data from a static buffer, set it to 0 and return the data from
135
+ * usbFunctionSetup(). This saves a couple of bytes.
136
+ */
137
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT   0
138
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
139
+ * You must implement the function usbFunctionWriteOut() which receives all
140
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
141
+ * can be found in 'usbRxToken'.
142
+ */
143
+#define USB_CFG_HAVE_FLOWCONTROL        0
144
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
145
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
146
+ * usbdrv.h.
147
+ */
148
+#define USB_CFG_DRIVER_FLASH_PAGE       0
149
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
150
+ * where the driver's constants (descriptors) are located. Or in other words:
151
+ * Define this to 1 for boot loaders on the ATMega128.
152
+ */
153
+#define USB_CFG_LONG_TRANSFERS          0
154
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
155
+ * in a single control-in or control-out transfer. Note that the capability
156
+ * for long transfers increases the driver size.
157
+ */
158
+/* #define USB_RX_USER_HOOK(data, len)     if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
159
+/* This macro is a hook if you want to do unconventional things. If it is
160
+ * defined, it's inserted at the beginning of received message processing.
161
+ * If you eat the received message and don't want default processing to
162
+ * proceed, do a return after doing your things. One possible application
163
+ * (besides debugging) is to flash a status LED on each packet.
164
+ */
165
+/* #define USB_RESET_HOOK(resetStarts)     if(!resetStarts){hadUsbReset();} */
166
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
167
+ * one parameter which distinguishes between the start of RESET state and its
168
+ * end.
169
+ */
170
+/* #define USB_SET_ADDRESS_HOOK()              hadAddressAssigned(); */
171
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
172
+ * received.
173
+ */
174
+#define USB_COUNT_SOF                   0
175
+/* define this macro to 1 if you need the global variable "usbSofCount" which
176
+ * counts SOF packets. This feature requires that the hardware interrupt is
177
+ * connected to D- instead of D+.
178
+ */
179
+/* #ifdef __ASSEMBLER__
180
+ * macro myAssemblerMacro
181
+ *     in      YL, TCNT0
182
+ *     sts     timer0Snapshot, YL
183
+ *     endm
184
+ * #endif
185
+ * #define USB_SOF_HOOK                    myAssemblerMacro
186
+ * This macro (if defined) is executed in the assembler module when a
187
+ * Start Of Frame condition is detected. It is recommended to define it to
188
+ * the name of an assembler macro which is defined here as well so that more
189
+ * than one assembler instruction can be used. The macro may use the register
190
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
191
+ * immediately after an SOF pulse may be lost and must be retried by the host.
192
+ * What can you do with this hook? Since the SOF signal occurs exactly every
193
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
194
+ * designs running on the internal RC oscillator.
195
+ * Please note that Start Of Frame detection works only if D- is wired to the
196
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
197
+ */
198
+#define USB_CFG_CHECK_DATA_TOGGLING     0
199
+/* define this macro to 1 if you want to filter out duplicate data packets
200
+ * sent by the host. Duplicates occur only as a consequence of communication
201
+ * errors, when the host does not receive an ACK. Please note that you need to
202
+ * implement the filtering yourself in usbFunctionWriteOut() and
203
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
204
+ * for each control- and out-endpoint to check for duplicate packets.
205
+ */
206
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH   0
207
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
208
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
209
+ */
210
+#define USB_USE_FAST_CRC                0
211
+/* The assembler module has two implementations for the CRC algorithm. One is
212
+ * faster, the other is smaller. This CRC routine is only used for transmitted
213
+ * messages where timing is not critical. The faster routine needs 31 cycles
214
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
215
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
216
+ * run the AVR close to its limit.
217
+ */
218
+
219
+/* -------------------------- Device Description --------------------------- */
220
+
221
+#define  USB_CFG_VENDOR_ID       0xc0, 0x16 /* = 0x16c0 = 5824 = voti.nl */
222
+/* USB vendor ID for the device, low byte first. If you have registered your
223
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
224
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
225
+ * *** IMPORTANT NOTE ***
226
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
227
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
228
+ * the implications!
229
+ */
230
+#define  USB_CFG_DEVICE_ID       0xdc, 0x05 /* = 0x05dc = 1500 */
231
+/* This is the ID of the product, low byte first. It is interpreted in the
232
+ * scope of the vendor ID. If you have registered your own VID with usb.org
233
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
234
+ * you may use one of obdev's free shared VID/PID pairs. See the file
235
+ * USB-IDs-for-free.txt for details!
236
+ * *** IMPORTANT NOTE ***
237
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
238
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
239
+ * the implications!
240
+ */
241
+#define USB_CFG_DEVICE_VERSION  0x00, 0x01
242
+/* Version number of the device: Minor number first, then major number.
243
+ */
244
+#define USB_CFG_VENDOR_NAME     'o', 'b', 'd', 'e', 'v', '.', 'a', 't'
245
+#define USB_CFG_VENDOR_NAME_LEN 8
246
+/* These two values define the vendor name returned by the USB device. The name
247
+ * must be given as a list of characters under single quotes. The characters
248
+ * are interpreted as Unicode (UTF-16) entities.
249
+ * If you don't want a vendor name string, undefine these macros.
250
+ * ALWAYS define a vendor name containing your Internet domain name if you use
251
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
252
+ * details.
253
+ */
254
+#define USB_CFG_DEVICE_NAME     'T', 'e', 'm', 'p', 'l', 'a', 't', 'e'
255
+#define USB_CFG_DEVICE_NAME_LEN 8
256
+/* Same as above for the device name. If you don't want a device name, undefine
257
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
258
+ * you use a shared VID/PID.
259
+ */
260
+/*#define USB_CFG_SERIAL_NUMBER   'N', 'o', 'n', 'e' */
261
+/*#define USB_CFG_SERIAL_NUMBER_LEN   0 */
262
+/* Same as above for the serial number. If you don't want a serial number,
263
+ * undefine the macros.
264
+ * It may be useful to provide the serial number through other means than at
265
+ * compile time. See the section about descriptor properties below for how
266
+ * to fine tune control over USB descriptors such as the string descriptor
267
+ * for the serial number.
268
+ */
269
+#define USB_CFG_DEVICE_CLASS        0xff    /* set to 0 if deferred to interface */
270
+#define USB_CFG_DEVICE_SUBCLASS     0
271
+/* See USB specification if you want to conform to an existing device class.
272
+ * Class 0xff is "vendor specific".
273
+ */
274
+#define USB_CFG_INTERFACE_CLASS     0   /* define class here if not at device level */
275
+#define USB_CFG_INTERFACE_SUBCLASS  0
276
+#define USB_CFG_INTERFACE_PROTOCOL  0
277
+/* See USB specification if you want to conform to an existing device class or
278
+ * protocol. The following classes must be set at interface level:
279
+ * HID class is 3, no subclass and protocol required (but may be useful!)
280
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
281
+ */
282
+/* #define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    42 */
283
+/* Define this to the length of the HID report descriptor, if you implement
284
+ * an HID device. Otherwise don't define it or define it to 0.
285
+ * If you use this define, you must add a PROGMEM character array named
286
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
287
+ * Don't forget to keep the array and this define in sync!
288
+ */
289
+
290
+/* #define USB_PUBLIC static */
291
+/* Use the define above if you #include usbdrv.c instead of linking against it.
292
+ * This technique saves a couple of bytes in flash memory.
293
+ */
294
+
295
+/* ------------------- Fine Control over USB Descriptors ------------------- */
296
+/* If you don't want to use the driver's default USB descriptors, you can
297
+ * provide our own. These can be provided as (1) fixed length static data in
298
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
299
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
300
+ * information about this function.
301
+ * Descriptor handling is configured through the descriptor's properties. If
302
+ * no properties are defined or if they are 0, the default descriptor is used.
303
+ * Possible properties are:
304
+ *   + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
305
+ *     at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
306
+ *     used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
307
+ *     you want RAM pointers.
308
+ *   + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
309
+ *     in static memory is in RAM, not in flash memory.
310
+ *   + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
311
+ *     the driver must know the descriptor's length. The descriptor itself is
312
+ *     found at the address of a well known identifier (see below).
313
+ * List of static descriptor names (must be declared PROGMEM if in flash):
314
+ *   char usbDescriptorDevice[];
315
+ *   char usbDescriptorConfiguration[];
316
+ *   char usbDescriptorHidReport[];
317
+ *   char usbDescriptorString0[];
318
+ *   int usbDescriptorStringVendor[];
319
+ *   int usbDescriptorStringDevice[];
320
+ *   int usbDescriptorStringSerialNumber[];
321
+ * Other descriptors can't be provided statically, they must be provided
322
+ * dynamically at runtime.
323
+ *
324
+ * Descriptor properties are or-ed or added together, e.g.:
325
+ * #define USB_CFG_DESCR_PROPS_DEVICE   (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
326
+ *
327
+ * The following descriptors are defined:
328
+ *   USB_CFG_DESCR_PROPS_DEVICE
329
+ *   USB_CFG_DESCR_PROPS_CONFIGURATION
330
+ *   USB_CFG_DESCR_PROPS_STRINGS
331
+ *   USB_CFG_DESCR_PROPS_STRING_0
332
+ *   USB_CFG_DESCR_PROPS_STRING_VENDOR
333
+ *   USB_CFG_DESCR_PROPS_STRING_PRODUCT
334
+ *   USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
335
+ *   USB_CFG_DESCR_PROPS_HID
336
+ *   USB_CFG_DESCR_PROPS_HID_REPORT
337
+ *   USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
338
+ *
339
+ * Note about string descriptors: String descriptors are not just strings, they
340
+ * are Unicode strings prefixed with a 2 byte header. Example:
341
+ * int  serialNumberDescriptor[] = {
342
+ *     USB_STRING_DESCRIPTOR_HEADER(6),
343
+ *     'S', 'e', 'r', 'i', 'a', 'l'
344
+ * };
345
+ */
346
+
347
+#define USB_CFG_DESCR_PROPS_DEVICE                  0
348
+#define USB_CFG_DESCR_PROPS_CONFIGURATION           0
349
+#define USB_CFG_DESCR_PROPS_STRINGS                 0
350
+#define USB_CFG_DESCR_PROPS_STRING_0                0
351
+#define USB_CFG_DESCR_PROPS_STRING_VENDOR           0
352
+#define USB_CFG_DESCR_PROPS_STRING_PRODUCT          0
353
+#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER    0
354
+#define USB_CFG_DESCR_PROPS_HID                     0
355
+#define USB_CFG_DESCR_PROPS_HID_REPORT              0
356
+#define USB_CFG_DESCR_PROPS_UNKNOWN                 0
357
+
358
+
359
+//#define usbMsgPtr_t unsigned short
360
+/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We may define it to
361
+ * a scalar type here because gcc generates slightly shorter code for scalar
362
+ * arithmetics than for pointer arithmetics. Remove this define for backward
363
+ * type compatibility or define it to an 8 bit type if you use data in RAM only
364
+ * and all RAM is below 256 bytes (tiny memory model in IAR CC).
365
+ */
366
+
367
+/* ----------------------- Optional MCU Description ------------------------ */
368
+
369
+/* The following configurations have working defaults in usbdrv.h. You
370
+ * usually don't need to set them explicitly. Only if you want to run
371
+ * the driver on a device which is not yet supported or with a compiler
372
+ * which is not fully supported (such as IAR C) or if you use a differnt
373
+ * interrupt than INT0, you may have to define some of these.
374
+ */
375
+
376
+// https://github.com/micronucleus/micronucleus/blob/master/firmware/configuration/t85_default/bootloaderconfig.h
377
+// setup interrupt for Pin Change for D+
378
+#define USB_INTR_CFG            PCMSK // Pin interrupt enable register
379
+#define USB_INTR_CFG_SET        (1 << USB_CFG_DPLUS_BIT) // Mask for pin in pin interrupt enable register PCMSK to be set on usbInit
380
+#define USB_INTR_CFG_CLR        0 // Mask for pin in pin interrupt enable register PCMSK to be cleared on usbInit. 0 = no clear
381
+#define USB_INTR_ENABLE         GIMSK // Global interrupt enable register
382
+#define USB_INTR_ENABLE_BIT     PCIE  // Bit position in global interrupt enable register
383
+#define USB_INTR_PENDING        GIFR  // Register to read interrupt flag
384
+#define USB_INTR_PENDING_BIT    PCIF  // Bit position in register to read interrupt flag
385
+
386
+#endif /* __usbconfig_h_included__ */

+ 30
- 0
sensor/src/main.c View File

@@ -0,0 +1,30 @@
1
+
2
+#include <avr/io.h>
3
+#include <avr/interrupt.h>
4
+#include <avr/wdt.h>
5
+#include <util/delay.h>
6
+
7
+#include "usbdrv.h"
8
+
9
+usbMsgLen_t usbFunctionSetup(uchar data[8])
10
+{
11
+    return 0;   /* default for not implemented requests: return no data back to host */
12
+}
13
+
14
+int __attribute__((noreturn)) main(void) {
15
+    wdt_enable(WDTO_1S);
16
+
17
+    usbInit();
18
+
19
+    usbDeviceDisconnect();  /* enforce re-enumeration, do this while interrupts are disabled! */
20
+    wdt_reset();
21
+    _delay_ms(255); /* fake USB disconnect for > 250 ms */
22
+    usbDeviceConnect();
23
+
24
+    sei();
25
+
26
+    while (1) {
27
+        wdt_reset();
28
+        usbPoll();
29
+    }
30
+}

+ 1
- 0
sensor/v-usb

@@ -0,0 +1 @@
1
+Subproject commit 7a28fdc685952412dad2b8842429127bc1cf9fa7

Loading…
Cancel
Save