No changes between revisions
/Designs/Tools/i2c_AVR_USB/SW/firmware/firmware.bin
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:executable
+*
\ No newline at end of property
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Designs/Tools/i2c_AVR_USB/SW/firmware/firmware.hex
0,0 → 1,301
:10000000DDC049C2F6C0F5C0F4C0F3C0F2C0F1C013
:10001000F0C0EFC0EEC0EDC0ECC0EBC0EAC0E9C07C
:10002000E8C0E7C0E6C0090212000101008005092E
:10003000040000000000000012011001FF00000891
:10004000030431C60501010200011A0369003200F0
:1000500063002D00740069006E0079002D007500AA
:10006000730062001A03540069006C006C002000E9
:100070004800610072006200610075006D000403B9
:1000800009040100FF8E4932432064657669636587
:100090002061742061646472657373203078257800
:1000A0000A005365747570202578202578202578FE
:1000B0002025780A007265717565737420666F7209
:1000C0002064656C617920256475730A0069326368
:1000D000202573206174203078253032782C206CF4
:1000E000656E203D2025640A004932432072656117
:1000F000643A2061646472657373206572726F7212
:1001000020402025780A0072656164202564206201
:10011000797465732C202564206578700A006578F1
:100120006365656473210A0064617461203D202564
:10013000780A006E6F7420696E2061636B2073749F
:100140006174650A0077726974652025642062799C
:100150007465732C202564206578700A00657863C7
:1001600065656473210A0064617461203D2025780F
:100170000A007772697465206661696C65640A00BB
:100180006E6F7420696E2061636B20737461746597
:100190000A006932632D74696E792D757362202DA2
:1001A0002028632920323030362062792054696C4F
:1001B0006C204861726261756D0A000011241FBED7
:1001C000CFE5D4E0DEBFCDBF10E0A0E6B0E0E0EACE
:1001D000F2E102C005900D92AA37B107D9F710E0FD
:1001E000AAE7B0E001C01D92A33BB107E1F74BD5F0
:1001F00055C806CFCF93DF9360919300635067FD9E
:1002000013C080919000CCE0D0E0C81BD109C95642
:10021000DF4F80918F008D3209F45EC080917A00AB
:1002200087FDA2C0109293008091600084FF40C0BF
:10023000609161006F3F09F43BC0693008F476C0FB
:100240006850609361008091830098E889278093CB
:10025000830068E080917A0087FD1DC04091910085
:100260005091920086FF77C0FA01862FA4E8B0E093
:1002700094919D9331968150D9F7262F215030E0EB
:100280002F5F3F4F240F351F309392002093910032
:10029000C62FCC5F56C084E890E0F3D3682F893036
:1002A00008F4A8C08FEF80936100CEE1C093600096
:1002B00094E183B3837069F49150D9F7109294005C
:1002C00010928E0040E060E070E08FEFDF91CF9100
:1002D00022C2DF91CF910895683009F0A3CF83EC5B
:1002E000809383008AE58093600010927A00888171
:1002F000807609F043C09A8110928C008981811127
:1003000047C010928D002CE830E082E030939200DC
:10031000209391008F3FA9F19F81911104C09E818C
:10032000981708F4892F809361007CCF10926100A8
:100330008091830098E889278093830061118ACF98
:10034000C4E084E890E0A3D0CC3009F4AFCF8FEFC5
:1003500080936100ABCFDA01862FE4E8F0E09D9155
:1003600091938150E1F789CFCE0103D48F3FF1F013
:10037000882309F457CF1092610054CFCE0196D252
:10038000C9CF988197FD16C090E890937A00CBCFA3
:10039000853091F0863001F18830D1F0893091F0CC
:1003A0002CE830E08A3021F180E0B0CF8EE18093FC
:1003B000600038CF8E81E8CF909394002CE830E035
:1003C00080E0A4CF909396002CE830E080E09ECFB0
:1003D00026E930E081E09ACF8B81813001F18230D3
:1003E000B1F0833051F080E090E490937A0092CFA6
:1003F00081E08CCFC82FCC5FA4CF911118C08EE7BD
:1004000090E0909392008093910084E0EDCF86E29B
:1004100090E0909392008093910082E1E5CF88E391
:1004200090E0909392008093910082E1DDCF913033
:1004300051F09230C1F68AE490E09093920080935C
:1004400091008AE1D1CF84E690E09093920080936E
:1004500091008AE1C9CF85B7836085BF8BB780647F
:100460008BBF0895A82FB92F80E090E041E050EABB
:10047000609530E009C02D9182279795879510F0FF
:1004800084279527305EC8F36F5FA8F30895EADFED
:100490008D939D930895CF93CFB7CF93C395989B9A
:1004A000E9F7989B09C0989B07C0989B05C0989B4B
:1004B00003C0989B01C0A1C0DF93C0919000DD27CD
:1004C000C956DF4F989B02C0DF91EBCF2F930F935C
:1004D0001F9303B32FEF00FB20F94F933F9313B308
:1004E0004FEF012700FB21F93BE031C04E7F012F88
:1004F00013B3216028C0102F4D7F2260000003B38A
:1005000029C04B7F2460012F000013B32BC013B30D
:10051000477F28602AC04F7E03B320612CC04F7DE7
:1005200013B320622FC04F7B03B3206432C0422735
:1005300003B349934FEF0000102710FB20F913B3CA
:100540001370C9F1297F91F2012700FB21F903B350
:10055000237F89F2315058F1102710FB22F913B391
:10056000277E79F2012700FB23F92F7C81F203B368
:10057000102710FB24F92F7971F200C013B3012763
:1005800000FB25F92F7359F200C003B3102710FBAD
:1005900026F9223040F200C013B3012700FB27F9EF
:1005A000243028F64F77206813B30000F9CF10E409
:1005B0001ABF002717C03B503195C31BD04010E431
:1005C0001ABF0881033CE9F00B34D9F020918E006A
:1005D0001981110F1213EDCF093641F10D3211F0CF
:1005E000013E39F7009395003F914F911F910F9174
:1005F0002F91DF91CAB7C6FD51CFCF91CFBFCF9119
:10060000189520919500222379F3109193001123DE
:1006100011F5343012F13093930020938F00109134
:1006200090003BE0311B3093900017C00091930085
:1006300001308CF40AE53091600034FD10C0009365
:100640006000C3E8D0E00FC02795A8F45150A9F48A
:10065000220F0000F9CF4AE503C042ED01C0432F4D
:10066000C4E1D0E032E014B31360A89A14BB05B320
:1006700020E413E05F93012756E005BB279520F4A3
:10068000515021F4220FF9CF012756E000003B5AC8
:1006900005BBD0F2279528F4515029F4220F000011
:1006A000F9CF012756E0279505BB20F4515021F4DE
:1006B000220FF9CF012756E02991332305BB21F6FC
:1006C0000C7F10919400110FC651D04005BB11F062
:1006D00010938E0010E41ABF016014B31C7F402FEA
:1006E0004C7F5F9100C000C005BB14BB45BB7CCFF5
:1006F000982F92959F709A3008F0995D905D5D9B60
:10070000FECF9CB98F708A3008F0895D805D5D9B5B
:10071000FECF8CB908950F931F93CF93DF93EB0116
:10072000142FE6DF5D9BFECF8AE38CB9112341F0E5
:1007300000E25D9BFECF0CB98991DADF1150C9F759
:100740005D9BFECF8DE08CB95D9BFECF8AE08CB9BE
:10075000DF91CF911F910F910895CF93C82F8A30C9
:1007600039F05D9BFECFCCB980E090E0CF91089549
:100770008DE0F3DFF6CFE0916200F09163003197F6
:10078000F1F7882359F0A598AD9A9D9BFECF8091F3
:100790006400909165000197F1F70895A59AAD98CE
:1007A000F6CFA498AC9A0895811103C0A49AAC988E
:1007B0000895F7CF80E0F8DF81E0DDDFF2CF0F931F
:1007C0001F93CF93DF93082F10E0C7E0D0E007C05E
:1007D000E8DF81E0D0DF80E0CEDF219760F0980194
:1007E0000C2E02C0359527950A94E2F720FDF0CF34
:1007F00080E0DADFEECFD5DF81E0BDDFC3B380E09C
:10080000BADFC295C17081E08C27DF91CF911F9133
:100810000F9108951F93CF93DF93182FC2DF80E0CD
:10082000AADFD8E0C0E081E0A6DFCC0F9C99C160D0
:1008300080E0A1DFD150B9F711110CC080E0B4DF26
:1008400081E099DF80E097DFACDF8C2FDF91CF91E3
:100850001F910895A6DFF4CF0F931F93CF93DF93DB
:10086000C0E0D0E006E810E005C0A4DF2196CF3755
:10087000D105B9F080E098DF80E07DDF8C2F880F14
:100880009EDF882391F3DF93CF931F930F933FD283
:100890000F900F900F900F908DDF2196CF37D105DD
:1008A00049F7DF91CF911F910F9108951F93CF9337
:1008B000DF93EC018BE790E090939200809391009E
:1008C0008B811F928F938A811F928F9389811F92B0
:1008D0008F9388811F928F9382EA90E09F938F93EA
:1008E00016D22DB73EB7265F3F4F0FB6F8943EBFE6
:1008F0000FBE2DBF8981823009F473C008F44CC04B
:10090000833009F492C0883008F05BC04E815F816B
:100910002C813D818A8180FF9BC084E790E05F93BA
:100920004F933F932F939F938F938DEC90E09F93E2
:100930008F93EDD11C81110F8A812DB73EB7285FAF
:100940003F4F0FB6F8943EBF0FBE2DBF80FD116024
:10095000898180FD03C025DF81E00DDF80E024DF99
:1009600080E009DF812F2BDF882309F474C081E048
:1009700080937F008E819F8190938100809380007F
:1009800029812093820021FF1AC0892BA9F08FEFC3
:10099000DF91CF911F9108958823C1F0813089F4B0
:1009A00044E050E062E870E08BE790E0A0D184E0A2
:1009B000DF91CF911F910895FDDE8E819F81892B5C
:1009C00031F780E0DF91CF911F9108958A81809364
:1009D0007B008B8180937C0082E0DF91CF911F911F
:1009E00008958A819B8190936500809364000097AD
:1009F00029F581E090E0909365008093640021E008
:100A000030E030936300209362009F938F9385EBD7
:100A100090E09F938F937BD10F900F900F900F904A
:100A200080E0DF91CF911F91089580917F008093A6
:100A30007B0081E0DF91CF911F9108959C01369555
:100A400027953093630020936200232BF1F6D7CFD4
:100A500087E790E064CF1F921F9389EE90E09F9309
:100A60008F9355D182E080937F0010928100109285
:100A70008000A0DE8E819F810F900F900F900F90CD
:100A80009ECFEF92FF920F931F93CF93DF93E82EA9
:100A9000192FF62E809181008F93809180008F9383
:100AA0001F926F9327E031E03F932F9330D10F9047
:100AB0000F900F900F900F900F9080917F008130DA
:100AC000B1F023E331E03F932F9321D14F2D50E03C
:100AD00060E070E08E2D912F13D10F900F908F2D2D
:100AE000DF91CF911F910F91FF90EF900895EF2D1F
:100AF000F0E020918000309181002E173F0778F1BF
:100B0000FF2009F1CE2DD12F08E211E020918000C5
:100B10003091810021503109309381002093800071
:100B200081E0232B09F080E075DE89931F928F937B
:100B30001F930F93ECD08C2F8E190F900F900F9066
:100B40000F908F1518F38091820081FFC8CF2091FC
:100B5000800030918100232B11F62CDEC0CF2EE1D6
:100B600031E03F932F93D3D0F09080000F900F90FF
:100B7000C7CFDF92EF92FF920F931F93CF93DF9334
:100B8000E82E192FF62E809181008F93809180009E
:100B90008F931F926F9325E431E03F932F93B7D04B
:100BA0000F900F900F900F900F900F9080917F00FB
:100BB0008130B9F020E831E03F932F93A8D04F2D3A
:100BC00050E060E070E08E2D912F9AD00F900F9042
:100BD0008F2DDF91CF911F910F91FF90EF90DF90BC
:100BE0000895EF2DF0E020918000309181002E17C4
:100BF0003F07E8F1FF2009F444C0CE2DD12FD12CBE
:100C000007E611E0209180003091810021503109E8
:100C1000309381002093800088811F928F931F93CF
:100C20000F9375D08991CBDD0F900F900F900F909F
:100C3000811102C0DD24D3948C2F8E198F1510F3EF
:100C40008091820081FF06C0209180003091810058
:100C5000232B59F0DD2009F4BBCF82E791E09F936D
:100C60008F9355D00F900F90B3CFA4DDF3CF2DE528
:100C700031E03F932F934BD0F09080000F900F9076
:100C8000B9CFD12CDDCF2EE088E190E00FB6F894FB
:100C9000A89581BD0FBE21BD539A86E289B986E62B
:100CA00090E09093B0008093AF0082E991E09F9331
:100CB0008F932DD0A498AC9AA598AD9A10928100EC
:100CC00010928000C9DD85B38C7F85BB84B38360BF
:100CD00084BB80E49CE90197F1F784B38C7F84BBEB
:100CE000BADB78940F900F90A89584DAFDCFFB01C2
:100CF000DC0102C005900D9241505040D8F7089594
:100D0000DC0101C06D9341505040E0F70895A2E02E
:100D1000B0E0ECE8F6E099C2FE013996619171917C
:100D2000FA83E9830FEA10E0D8018D919C91DC01F0
:100D300013962C911397286013962C93AF0109D02A
:100D4000D801ED91FC912381277F23832296E4E053
:100D500098C2ACE0B0E0EEEAF6E069C27C016B015B
:100D60008A01FC0117821682838181FFBAC188241F
:100D70008394912C8C0E9D1EF7019381F60193FDB7
:100D8000859193FF81916F01882309F4A6C1853273
:100D900039F493FD859193FF81916F01853221F4A0
:100DA000B70190E0BAD1E8CF712C312C20E020328D
:100DB000A8F48B3261F028F4803251F0833271F460
:100DC0000BC08D3239F0803349F4216028C0226095
:100DD000246025C0286023C0206121C027FD27C0D2
:100DE000382F30533A3078F426FF06C0FAE07F9E61
:100DF000300D1124732E13C08AE0389E300D11245B
:100E0000332E20620CC08E3221F426FD66C1206490
:100E100006C08C3611F4206802C0883641F4F60111
:100E200093FD859193FF81916F018111C0CF982F20
:100E30009554933018F09052933028F40C5F1F4F64
:100E4000FFE3F9830DC0833631F0833771F08335CA
:100E500009F05AC022C0F801808189830E5F1F4FBC
:100E600066246394712C540114C02801F2E04F0EE3
:100E7000511CF801A080B18026FF03C0672D70E0EF
:100E800002C06FEF7FEFC5012C873CD13C0182018E
:100E90002C856FE7262E222217C02801F2E04F0E84
:100EA000511CF801A080B18026FF03C0672D70E0BF
:100EB00002C06FEF7FEFC5012C8719D13C012C8553
:100EC00050E8252E222A820123FC1AC005C0B70152
:100ED00080E290E022D13A94832D90E06816790662
:100EE000B0F30EC0F50127FC859127FE81915F01CB
:100EF000B70190E012D131103A94F1E06F1A710805
:100F00006114710479F7E6C0843611F0893639F539
:100F1000F80127FF07C060817181828193810C5F96
:100F20001F4F08C060817181882777FD8095982FB9
:100F30000E5F1F4F4FE6642E622297FF09C0909507
:100F40008095709561957F4F8F4F9F4FF0E86F2A86
:100F50002AE030E0A4010DD1A82EA81843C085379F
:100F600031F43FEEB32EB2222AE030E024C099EFF4
:100F7000B92EB2228F36B9F020F4883509F0ADC011
:100F80000DC0803721F0883709F0A7C002C020E1EA
:100F9000B22AB4FE0BC084E0B82A08C024FF09C0FE
:100FA000E6E0BE2A06C028E030E005C020E130E0DF
:100FB00002C020E132E0F801B7FE07C06081718114
:100FC000828193810C5F1F4F06C06081718180E038
:100FD00090E00E5F1F4FA401CCD0A82EA8188FE779
:100FE000682E6B2066FE0BC0362D3E7FA71450F492
:100FF00064FE0AC062FC08C0362D3E7E05C0BA2CD5
:10100000362D03C0BA2C01C0B72C34FF0DC0FE0131
:10101000EA0DF11D8081803311F4397E09C032FF61
:1010200006C0B394B39404C0832F867809F0B394B8
:1010300033FD13C030FF0EC07A2CB31458F4730C78
:101040007B18B32C07C0B70180E290E03C8765D0E5
:10105000B3943C85B314B8F304C0B31410F43B1834
:1010600001C0312C34FF11C0B70180E390E03C8710
:1010700054D03C8532FF1CC031FF03C088E590E0AE
:1010800002C088E790E0B7010CC0832F867881F01A
:1010900031FD02C080E201C08BE237FD8DE2B70175
:1010A00090E03BD005C0B70180E390E036D07A9461
:1010B000A714C8F3AA94F401EA0DF11DB7018081C9
:1010C00090E02BD0A110F6CF05C0B70180E290E0F0
:1010D00024D03A943110F9CF4FCEF70126813781D1
:1010E00002C02FEF3FEFC9012C96E2E1BCC0FC012A
:1010F0000590615070400110D8F7809590958E0F43
:101100009F1F0895FC016150704001900110D8F7B5
:10111000809590958E0F9F1F08950F931F93CF93E7
:10112000DF938C01EB018B8181FD03C00FEF1FEF7B
:101130001AC082FF0DC02E813F818C819D812817AE
:10114000390764F4E881F9810193F983E88306C0E3
:10115000E885F985802F0995892B41F78E819F813C
:1011600001969F838E83C801DF91CF911F910F91CC
:101170000895FA01AA27283051F1203181F1E8942D
:101180006F936E7F6E5F7F4F8F4F9F4FAF4FB1E07A
:101190003ED0B4E03CD0670F781F891F9A1FA11D75
:1011A000680F791F8A1F911DA11D6A0F711D811D76
:1011B000911DA11D20D009F468943F912AE0269F3B
:1011C00011243019305D3193DEF6CF010895462F9A
:1011D0004770405D4193B3E00FD0C9F7F6CF462F7B
:1011E0004F70405D4A3318F0495D31FD40524193E4
:1011F00002D0A9F7EACFB4E0A695979587957795A1
:101200006795BA95C9F700976105710508959B0127
:10121000AC010A2E06945795479537952795BA95B0
:10122000C9F7620F731F841F951FA01D08952F9289
:101230003F924F925F926F927F928F929F92AF9266
:10124000BF92CF92DF92EF92FF920F931F93CF93B3
:10125000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF4A
:101260000FBECDBF09942A88398848885F846E8470
:101270007D848C849B84AA84B984C884DF80EE80BA
:10128000FD800C811B81AA81B981CE0FD11D0FB6C3
:10129000F894DEBF0FBECDBFED010895F894FFCFE7
:1012A0005AFF05000A000000000200000000AD0324
:0A12B0000000000072640077720075
:00000001FF
/Designs/Tools/i2c_AVR_USB/SW/firmware/usbdrv/USB-ID-FAQ.txt
0,0 → 1,149
Version 2012-07-09
 
==========================
WHY DO WE NEED THESE IDs?
==========================
 
USB is more than a low level protocol for data transport. It also defines a
common set of requests which must be understood by all devices. And as part
of these common requests, the specification defines data structures, the
USB Descriptors, which are used to describe the properties of the device.
 
From the perspective of an operating system, it is therefore possible to find
out basic properties of a device (such as e.g. the manufacturer and the name
of the device) without a device-specific driver. This is essential because
the operating system can choose a driver to load based on this information
(Plug-And-Play).
 
Among the most important properties in the Device Descriptor are the USB
Vendor- and Product-ID. Both are 16 bit integers. The most simple form of
driver matching is based on these IDs. The driver announces the Vendor- and
Product-IDs of the devices it can handle and the operating system loads the
appropriate driver when the device is connected.
 
It is obvious that this technique only works if the pair Vendor- plus
Product-ID is unique: Only devices which require the same driver can have the
same pair of IDs.
 
 
=====================================================
HOW DOES THE USB STANDARD ENSURE THAT IDs ARE UNIQUE?
=====================================================
 
Since it is so important that USB IDs are unique, the USB Implementers Forum,
Inc. (usb.org) needs a way to enforce this legally. It is not forbidden by
law to build a device and assign it any random numbers as IDs. Usb.org
therefore needs an agreement to regulate the use of USB IDs. The agreement
binds only parties who agreed to it, of course. Everybody else is free to use
any numbers for their IDs.
 
So how can usb.org ensure that every manufacturer of USB devices enters into
an agreement with them? They do it via trademark licensing. Usb.org has
registered the trademark "USB", all associated logos and related terms. If
you want to put an USB logo on your product or claim that it is USB
compliant, you must license these trademarks from usb.org. And this is where
you enter into an agreement. See the "USB-IF Trademark License Agreement and
Usage Guidelines for the USB-IF Logo" at
http://www.usb.org/developers/logo_license/.
 
Licensing the USB trademarks requires that you buy a USB Vendor-ID from
usb.org (one-time fee of ca. 2,000 USD), that you become a member of usb.org
(yearly fee of ca. 4,000 USD) and that you meet all the technical
specifications from the USB spec.
 
This means that most hobbyists and small companies will never be able to
become USB compliant, just because membership is so expensive. And you can't
be compliant with a driver based on V-USB anyway, because the AVR's port pins
don't meet the electrical specifications for USB. So, in principle, all
hobbyists and small companies are free to choose any random numbers for their
IDs. They have nothing to lose...
 
There is one exception worth noting, though: If you use a sub-component which
implements USB, the vendor of the sub-components may guarantee USB
compliance. This might apply to some or all of FTDI's solutions.
 
 
=======================================================================
WHY SHOULD YOU OBTAIN USB IDs EVEN IF YOU DON'T LICENSE USB TRADEMARKS?
=======================================================================
 
You have learned in the previous section that you are free to choose any
numbers for your IDs anyway. So why not do exactly this? There is still the
technical issue. If you choose IDs which are already in use by somebody else,
operating systems will load the wrong drivers and your device won't work.
Even if you choose IDs which are not currently in use, they may be in use in
the next version of the operating system or even after an automatic update.
 
So what you need is a pair of Vendor- and Product-IDs for which you have the
guarantee that no USB compliant product uses them. This implies that no
operating system will ever ship with drivers responsible for these IDs.
 
 
==============================================
HOW DOES OBJECTIVE DEVELOPMENT HANDLE USB IDs?
==============================================
 
Objective Development gives away pairs of USB-IDs with their V-USB licenses.
In order to ensure that these IDs are unique, Objective Development has an
agreement with the company/person who has bought the USB Vendor-ID from
usb.org. This agreement ensures that a range of USB Product-IDs is reserved
for assignment by Objective Development and that the owner of the Vendor-ID
won't give it to anybody else.
 
This means that you have to trust three parties to ensure uniqueness of
your IDs:
 
- Objective Development, that they don't give the same PID to more than
one person.
- The owner of the Vendor-ID that they don't assign PIDs from the range
assigned to Objective Development to anybody else.
- Usb.org that they don't assign the same Vendor-ID a second time.
 
 
==================================
WHO IS THE OWNER OF THE VENDOR-ID?
==================================
 
Objective Development has obtained ranges of USB Product-IDs under two
Vendor-IDs: Under Vendor-ID 5824 from Wouter van Ooijen (Van Ooijen
Technische Informatica, www.voti.nl) and under Vendor-ID 8352 from Jason
Kotzin (now flirc.tv, Inc.). Both VID owners have received their Vendor-ID
directly from usb.org.
 
 
=========================================================================
CAN I USE USB-IDs FROM OBJECTIVE DEVELOPMENT WITH OTHER DRIVERS/HARDWARE?
=========================================================================
 
The short answer is: Yes. All you get is a guarantee that the IDs are never
assigned to anybody else. What more do you need?
 
 
============================
WHAT ABOUT SHARED ID PAIRS?
============================
 
Objective Development has reserved some PID/VID pairs for shared use. You
have no guarantee of uniqueness for them, except that no USB compliant device
uses them. In order to avoid technical problems, we must ensure that all
devices with the same pair of IDs use the same driver on kernel level. For
details, see the file USB-IDs-for-free.txt.
 
 
======================================================
I HAVE HEARD THAT SUB-LICENSING OF USB-IDs IS ILLEGAL?
======================================================
 
A 16 bit integer number cannot be protected by copyright laws. It is not
sufficiently complex. And since none of the parties involved entered into the
USB-IF Trademark License Agreement, we are not bound by this agreement. So
there is no reason why it should be illegal to sub-license USB-IDs.
 
 
=============================================
WHO IS LIABLE IF THERE ARE INCOMPATIBILITIES?
=============================================
 
Objective Development disclaims all liabilities which might arise from the
assignment of IDs. If you guarantee product features to your customers
without proper disclaimer, YOU are liable for that.
/Designs/Tools/i2c_AVR_USB/SW/firmware/usbdrv/usbportability.h
0,0 → 1,143
/* Name: usbportability.h
* Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
* Author: Christian Starkjohann
* Creation Date: 2008-06-17
* Tabsize: 4
* Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
* License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
*/
 
/*
General Description:
This header is intended to contain all (or at least most of) the compiler
and library dependent stuff. The C code is written for avr-gcc and avr-libc.
The API of other development environments is converted to gcc's and avr-libc's
API by means of defines.
 
This header also contains all system includes since they depend on the
development environment.
 
Thanks to Oleg Semyonov for his help with the IAR tools port!
*/
 
#ifndef __usbportability_h_INCLUDED__
#define __usbportability_h_INCLUDED__
 
/* We check explicitly for IAR and CodeVision. Default is avr-gcc/avr-libc. */
 
/* ------------------------------------------------------------------------- */
#if defined __IAR_SYSTEMS_ICC__ || defined __IAR_SYSTEMS_ASM__ /* check for IAR */
/* ------------------------------------------------------------------------- */
 
#ifndef ENABLE_BIT_DEFINITIONS
# define ENABLE_BIT_DEFINITIONS 1 /* Enable bit definitions */
#endif
 
/* Include IAR headers */
#include <ioavr.h>
#ifndef __IAR_SYSTEMS_ASM__
# include <inavr.h>
#endif
 
#define __attribute__(arg) /* not supported on IAR */
 
#ifdef __IAR_SYSTEMS_ASM__
# define __ASSEMBLER__ /* IAR does not define standard macro for asm */
#endif
 
#ifdef __HAS_ELPM__
# define PROGMEM __farflash
#else
# define PROGMEM __flash
#endif
 
#define USB_READ_FLASH(addr) (*(PROGMEM char *)(addr))
 
/* The following definitions are not needed by the driver, but may be of some
* help if you port a gcc based project to IAR.
*/
#define cli() __disable_interrupt()
#define sei() __enable_interrupt()
#define wdt_reset() __watchdog_reset()
#define _BV(x) (1 << (x))
 
/* assembler compatibility macros */
#define nop2 rjmp $+2 /* jump to next instruction */
#define XL r26
#define XH r27
#define YL r28
#define YH r29
#define ZL r30
#define ZH r31
#define lo8(x) LOW(x)
#define hi8(x) (((x)>>8) & 0xff) /* not HIGH to allow XLINK to make a proper range check */
 
/* Depending on the device you use, you may get problems with the way usbdrv.h
* handles the differences between devices. Since IAR does not use #defines
* for MCU registers, we can't check for the existence of a particular
* register with an #ifdef. If the autodetection mechanism fails, include
* definitions for the required USB_INTR_* macros in your usbconfig.h. See
* usbconfig-prototype.h and usbdrv.h for details.
*/
 
/* ------------------------------------------------------------------------- */
#elif __CODEVISIONAVR__ /* check for CodeVision AVR */
/* ------------------------------------------------------------------------- */
/* This port is not working (yet) */
 
/* #define F_CPU _MCU_CLOCK_FREQUENCY_ seems to be defined automatically */
 
#include <io.h>
#include <delay.h>
 
#define __attribute__(arg) /* not supported on IAR */
 
#define PROGMEM __flash
#define USB_READ_FLASH(addr) (*(PROGMEM char *)(addr))
 
#ifndef __ASSEMBLER__
static inline void cli(void)
{
#asm("cli");
}
static inline void sei(void)
{
#asm("sei");
}
#endif
#define _delay_ms(t) delay_ms(t)
#define _BV(x) (1 << (x))
#define USB_CFG_USE_SWITCH_STATEMENT 1 /* macro for if() cascase fails for unknown reason */
 
#define macro .macro
#define endm .endmacro
#define nop2 rjmp .+0 /* jump to next instruction */
 
/* ------------------------------------------------------------------------- */
#else /* default development environment is avr-gcc/avr-libc */
/* ------------------------------------------------------------------------- */
 
#include <avr/io.h>
#ifdef __ASSEMBLER__
# define _VECTOR(N) __vector_ ## N /* io.h does not define this for asm */
#else
# include <avr/pgmspace.h>
#endif
 
#if USB_CFG_DRIVER_FLASH_PAGE
# define USB_READ_FLASH(addr) pgm_read_byte_far(((long)USB_CFG_DRIVER_FLASH_PAGE << 16) | (long)(addr))
#else
# define USB_READ_FLASH(addr) pgm_read_byte(addr)
#endif
 
#define macro .macro
#define endm .endm
#define nop2 rjmp .+0 /* jump to next instruction */
 
#endif /* development environment */
 
/* for conveniecne, ensure that PRG_RDB exists */
#ifndef PRG_RDB
# define PRG_RDB(addr) USB_READ_FLASH(addr)
#endif
#endif /* __usbportability_h_INCLUDED__ */