/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _STM32_BL_H_
#define _STM32_BL_H_
/*
* cmd_erase, cmd_read_memory, cmd_write_memory - byte to send for cmd
* no_extra_sync - uart erase requires no extra sync between cnt and sector
*
* write_data - write length bytes of data
* (function must checksum data. space reserved for checksum in buffer)
* write_cmd - write cmd
* read_data - read length bytes of data
* read_ack - read ack
* functions return results of command
*/
typedef struct handle
{
uint8_t cmd_erase;
uint8_t cmd_read_memory;
uint8_t cmd_write_memory;
uint8_t no_extra_sync;
uint8_t (*write_data)(struct handle *, uint8_t *buffer, int length);
uint8_t (*write_cmd)(struct handle *, uint8_t cmd);
uint8_t (*read_data)(struct handle *, uint8_t *buffer, int length);
uint8_t (*read_ack)(struct handle *);
} handle_t;
uint8_t checksum(handle_t *handle, uint8_t *bytes, int length);
uint8_t erase_sector(handle_t *handle, uint16_t sector);
uint8_t read_memory(handle_t *handle, uint32_t addr, uint32_t length, uint8_t *buffer);
uint8_t write_memory(handle_t *handle, uint32_t addr, uint32_t length, uint8_t *buffer);
/*
* Bootloader commands
* _NS versions are no-stretch.
* will return CMD_BUSY instead of stretching the clock
*/
#define CMD_GET 0x00
#define CMD_GET_VERSION 0x01
#define CMD_GET_ID 0x02
#define CMD_READ_MEMORY 0x11
#define CMD_NACK 0x1F
#define CMD_GO 0x21
#define CMD_WRITE_MEMORY 0x31
#define CMD_WRITE_MEMORY_NS 0x32
#define CMD_ERASE 0x44
#define CMD_ERASE_NS 0x45
#define CMD_SOF 0x5A
#define CMD_WRITE_PROTECT 0x63
#define CMD_WRITE_PROTECT_NS 0x64
#define CMD_WRITE_UNPROTECT 0x73
#define CMD_WRITE_UNPROTECT_NS 0x74
#define CMD_BUSY 0x76
#define CMD_ACK 0x79
#define CMD_UART_ENABLE 0x7F
#define CMD_READOUT_PROTECT 0x82
#define CMD_READOUT_PROTECT_NS 0x83
#define CMD_READOUT_UNPROTECT 0x92
#define CMD_READOUT_UNPROTECT_NS 0x93
#define CMD_SOF_ACK 0xA5
#endif /* _STM32_BL_H_ */