summaryrefslogtreecommitdiffstats
path: root/commandline/library/micronucleus_lib.h
blob: dcbac830c852b8900a4f77f6ce21759d490fe42e (plain)
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
#ifndef MICRONUCLEUS_LIB_H
#define MICRONUCLEUS_LIB_H

/*
	Created: September 2012
	by ihsan Kehribar <ihsan@kehribar.me>
	
	Permission is hereby granted, free of charge, to any person obtaining a copy of
	this software and associated documentation files (the "Software"), to deal in
	the Software without restriction, including without limitation the rights to
	use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
	of the Software, and to permit persons to whom the Software is furnished to do
	so, subject to the following conditions:

	The above copyright notice and this permission notice shall be included in all
	copies or substantial portions of the Software.

	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
	SOFTWARE.	
*/

/********************************************************************************
* Header files
********************************************************************************/
#if defined WIN
   #include <lusb0_usb.h>		// this is libusb, see http://libusb.sourceforge.net/
#else
   #include <usb.h>				// this is libusb, see http://libusb.sourceforge.net/
#endif
//#include "opendevice.h"			// common code moved to separate module
#include <assert.h>
/*******************************************************************************/

/********************************************************************************
* USB details
********************************************************************************/
#define	MICRONUCLEUS_VENDOR_ID	 0x16D0
#define	MICRONUCLEUS_PRODUCT_ID	 0x0753
#define	MICRONUCLEUS_USB_TIMEOUT 0xFFFF
/*******************************************************************************/

/********************************************************************************
* Declearations
********************************************************************************/
//typedef usb_dev_handle micronucleus;
// representing version number of micronucleus device
typedef struct _micronucleus_version {
	unsigned char major;
	unsigned char minor;
} micronucleus_version;

// handle representing one micronucleus device
typedef struct _micronucleus {
	usb_dev_handle *device;
	// general information about device
	micronucleus_version version;
	unsigned int flash_size;  // programmable size (in bytes) of progmem
	unsigned int page_size;   // size (in bytes) of page
	unsigned int pages;       // total number of pages to program
	unsigned int write_sleep; // milliseconds
	unsigned int erase_sleep; // milliseconds
} micronucleus;

/*******************************************************************************/

/********************************************************************************
* Try to connect to the device
*     Returns: device handle for success, NULL for fail
********************************************************************************/
micronucleus* micronucleus_connect();
/*******************************************************************************/

/********************************************************************************
* Erase the flash memory
********************************************************************************/
int micronucleus_eraseFlash(micronucleus* deviceHandle);
/*******************************************************************************/

/********************************************************************************
* Write the flash memory
********************************************************************************/
int micronucleus_writeFlash(micronucleus* deviceHandle, unsigned int program_length, unsigned char* program);
/*******************************************************************************/

/********************************************************************************
* Starts the user application
********************************************************************************/
int micronucleus_startApp(micronucleus* deviceHandle);
/*******************************************************************************/

#endif