summaryrefslogtreecommitdiffstats
path: root/commandline/library/micronucleus_lib.h
blob: ce31f97ecec9c1a31e8b3a25b2bd9bbfc809df56 (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#ifndef MICRONUCLEUS_LIB_H
#define MICRONUCLEUS_LIB_H

/*
  Created: September 2012
  (c) 2012 by ihsan Kehribar <ihsan@kehribar.me>
  Changes for Micronucleus protocol version V2.x
  (c) 2014 T. Bo"scke

  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 <libusb.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>
#include <stdio.h>
#include <stdlib.h>
/*******************************************************************************/

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

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

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

#define MICRONUCLEUS_COMMANDLINE_VERSION "Commandline tool version: 2.0a5"

// handle representing one micronucleus device
typedef struct _micronucleus {
  libusb_device_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 bootloader_start; // Start of the bootloader
  unsigned int pages;       // total number of pages to program
  unsigned int write_sleep; // milliseconds
  unsigned int erase_sleep; // milliseconds
  unsigned char signature1; // only used in protocol v2
  unsigned char signature2; // only used in protocol v2
} micronucleus;

typedef void (*micronucleus_callback)(float progress);

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

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

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

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

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

/********************************************************************************
* Disconnects from the device and deinitializes libusb
********************************************************************************/
void micronucleus_disconnect(micronucleus* deviceHandle);
/*******************************************************************************/

#endif