Bruce, Software locking can be anything from trivial to extremely complex, depending on the level of security you desire. I'll describe a trivial version: 1. An eeprom/flash memory location is used to keep track of which options are allowed to run on the unit. The code then checks the flags each time a given function is run to make sure its allowed. The location is programmed at the factory with whatever default you want. 2. When a customer wants an upgrade, use a small PC program that takes the particular units serial number and a known "key" to create an unlock code for the particular unit. It could be as simple as (serialnumber XOR key). This result is entered into the unit in whatever way desired (serial port, LCD/keypad, etc.) along with the new value for the eeprom location. Obviously an XOR is simple to crack if you have multiple units. You can hide it a little better by adding in other randomly generated bytes or bits that are actually ignored by the unit. Of course there are many ways to hide the information that are much more secure than the above. 3. When the unit recieves an update command, the software strips out the unlock code and the new eeprom value from the input and then XORs the lock code against the same "key" (hardcoded in the firmware). If the result matches the the units serial number, it's OK to save the new eeprom value, else an error is generated.. I can be more specific if need be. Ken ----- Original Message ----- From: "Bruce Partridge" To: Sent: Friday, July 30, 2004 11:00 AM Subject: [PIC:] Software feature locking > I want to ship the same software with different feature sets. The hardware > has a serial number chip, so I plan to sell an unlock code specific to the > feature and the particular unit. > > The idea is to have one item to deal with, but allow the user to pick the > features they want to enable. > > Does anyone have any suggestions on software or a strategy for doing this? > > Bruce Partridge -- http://www.piclist.com hint: PICList Posts must start with ONE topic: [PIC]:,[SX]:,[AVR]: ->uP ONLY! [EE]:,[OT]: ->Other [BUY]:,[AD]: ->Ads