diff --git a/files for command line utility.zip b/files for command line utility.zip new file mode 100644 index 0000000..bf40ffc Binary files /dev/null and b/files for command line utility.zip differ diff --git a/release/manual.md b/release/manual.md index e346505..bf25efa 100644 --- a/release/manual.md +++ b/release/manual.md @@ -37,7 +37,9 @@ b) executing the `autobuilder` script in the main directory that will do the abo **NOTE: Although the autobuilder should be working in most use cases, it's still better to build the tools manually (if you have the needed knowledge, of course)** ## 2\. Getting started - +Before you start using TinI/O, you have to reflash the target chip so it can be recognised by your PC. That is done with the supplied `cy-config` utility. +To reflash a chip, you'll need to navigate to `/usr/share/tinio/flashes` directory. There you'll find files that contain different flash images. (I'll say more about the images later in the chapter TODO) +For a general configuration (5 inputs, 5 outputs), we'll use TODO You can get a quick summary on TinI/O by executing it. ``` diff --git a/release/tinio/Command_Utility.c b/release/tinio/Command_Utility.c new file mode 100644 index 0000000..01ef543 --- /dev/null +++ b/release/tinio/Command_Utility.c @@ -0,0 +1,464 @@ +/* + * Command line utility for downloading FW + * Copyright (C) 2013 Cypress Semiconductor + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../../common/header/CyUSBSerial.h" +#include "../../common/header/CyUSBBootloader.h" + +#define CY_MAX_DEVICES 30 +#define CY_MAX_INTERFACES 4 + +typedef struct _CY_DEVICE_STRUCT { + int deviceNumber; + int interfaceFunctionality[CY_MAX_INTERFACES]; + bool isI2c; + bool isSpi; + int numInterface; +}CY_DEVICE_STRUCT; + +CY_DEVICE_STRUCT *glDevice; +int i2cDeviceIndex[CY_MAX_DEVICES][CY_MAX_INTERFACES]; +unsigned char *deviceNumber = NULL; +int cyDevices, i2cDevices = 0, numDevices = 0; +int selectedDeviceNum = -1, selectedInterfaceNum = -1; +bool exitApp = false; +unsigned short pageAddress = -1; +short readWriteLength = -1; +bool deviceAddedRemoved = false; +unsigned char read_buffer[512]; +int getUserInput() +{ + char userInput[6], x; + int output,i = 0; + bool isDigit = true; + x = getchar(); + while (x != '\n'){ + if (i < 5){ + userInput[i] = x; + i++; + } + if (!isdigit(x)) + isDigit = false; + + x = getchar(); + } + userInput[i] = '\0'; + if (isDigit == false) + return -1; + output = atoi(userInput); + return output; +} + + +unsigned int GetCheckSum(unsigned int *buff, unsigned int length) +{ + unsigned int i,val; + unsigned int checkSum =0; + + for (i = 0; i < length; i++) // start at 12th byte + { + checkSum += buff[i]; + } + + return checkSum; +} + + +void deviceHotPlug () { + + CY_RETURN_STATUS rStatus; + deviceAddedRemoved = true; + selectedDeviceNum = -1; + selectedInterfaceNum = -1; + printf ("Device of interest Removed/Added \n"); + rStatus = CyGetListofDevices (&numDevices); + if (rStatus != CY_SUCCESS) { + printf ("CY:Error in Getting List of Devices: Error NO:<%d> \n", rStatus); + return rStatus; + } + printListOfDevices (false); +} + +int main (int argc, char **argv) +{ + int index = 0, i, j, userInput; + int output; + int count=0,h=0,cnt; + int size_buffer,size_checksum; + FILE *fp=NULL; + CY_HANDLE handle; + unsigned char buff[516]; + int silicon_id; + int tempSelectedDeviceNum, tempSelectedInterfaceNum; + CY_RETURN_STATUS rStatus; + signal (SIGUSR1, deviceHotPlug); + char src_file[100]; + char id[4]; + + memset(buff,0,sizeof(buff)); + + + glDevice = (CY_DEVICE_STRUCT *)malloc (CY_MAX_DEVICES *sizeof (CY_DEVICE_STRUCT)); + if (glDevice == NULL){ + printf ("Memory allocation failed ...!! \n"); + return -1; + } + rStatus = CyLibraryInit (); + if (rStatus != CY_SUCCESS) { + printf ("CY:Error in Doing library init Error NO:<%d> \n", rStatus); + return rStatus; + } + rStatus = CyGetListofDevices (&numDevices); + if (rStatus != CY_SUCCESS) { + printf ("CY:Error in Getting List of Devices: Error NO:<%d> \n", rStatus); + return rStatus; + } + printListOfDevices(true); + do { + + printf ("-------------------------------------------------------------------\n"); + printf ("1: Print list of devices \n"); + if (selectedDeviceNum != -1 && selectedInterfaceNum != -1){ + printf ("2: Change device selection--selected device: [Device number %d] : [Interface No %d]",\ + selectedDeviceNum, selectedInterfaceNum); + if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_I2C) + printf (" : I2C\n"); + else if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_SPI) + printf (" : SPI\n"); + else if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_UART) + printf ("UART : \n"); + else + printf (" : NA\n"); + + } + else + printf ("2: Select device...No device selected !!\n"); + + + userInput = getUserInput(); + if (userInput < 1 || userInput > 5){ + printf ("Wrong selection code ... Enter again \n"); + continue; + } + + switch (userInput){ + + case 1: + printListOfDevices(true); + break; + case 2: + if (cyDevices == 0) { + printf ("No device of interest connected ...!!\n"); + continue; + } + printf ("Enter Device number to be selected.. \n"); + tempSelectedDeviceNum = getUserInput(); + //printf ("Selected device number is %d \n",tempSelectedDeviceNum); + if (tempSelectedDeviceNum >= cyDevices || tempSelectedDeviceNum == -1){ + printf ("Wrong device selection \n"); + continue; + } + printf ("Enter interface number..\n"); + tempSelectedInterfaceNum = getUserInput(); + //printf ("Selected device number is %d %d\n",tempSelectedInterfaceNum, glDevice[tempSelectedDeviceNum].numInterface); + + if (tempSelectedInterfaceNum >= glDevice[tempSelectedDeviceNum].numInterface || + tempSelectedInterfaceNum == -1) { + printf ("Wrong interface Selection selection \n"); + continue; + } + + if (deviceAddedRemoved == true) { + printf ("Device of interest was added/removed .... Print and select from new list\n"); + continue; + } + selectedDeviceNum = tempSelectedDeviceNum; + selectedInterfaceNum = tempSelectedInterfaceNum; + + + rStatus = CyOpen (selectedDeviceNum,selectedInterfaceNum , &handle); + //printf("return status = %d", rStatus); + if (rStatus == CY_SUCCESS){ + //printf("device opened \n"); + } + else + { + printf("fail \n"); + } + + + + // printf("Please enter file to be opened"); + + fp = fopen(argv[1],"rb+"); + // printf("%s", src_file); + rStatus = CyFlashConfigEnable(handle,1); + + if (rStatus == CY_SUCCESS){ + // printf("Flash is configured"); + } + else + { + printf("Manufacturing mode of FLASH is not configured"); + } + // printf("status %d",rStatus); + + if(fp == NULL) + { + printf("\n fopen() Error!!!\n"); + return 1; + } + printf("\n File opened successfully\n"); + if(sizeof(buff) != fread(buff,1,516,fp)) + { + printf("\n fread() failed\n"); + return 1; + } + printf("\n Bytes successfully read \n"); + // printf("reached here"); + + // silicon_id = *(unsigned int *)buff; + + rStatus=CyGetSiliconID(handle,&silicon_id); + if (rStatus == CY_SUCCESS){ + // printf(" Correct silicon id"); + + } + else + { + printf("Not correct ID"); + } + + // printf("silicon id %04x,%d",silicon_id,sizeof(silicon_id)); + id[0]= (silicon_id); + id[1]= ((silicon_id >> 8) & 0xFF); + id[2]= ((silicon_id >> 16) & 0xFF); + id[3]= ((silicon_id >> 24) & 0xFF); + + + + rStatus=CyReadDeviceConfig(handle,&read_buffer); + if (rStatus == CY_SUCCESS){ + // printf(" Got the data"); + + } + else + { + printf("Not done"); + } + + /*printf (" 0 %02x, %02x \r \n", id[0],read_buffer[0]); + printf (" 1 %02x, %02x \r \n", id[1],read_buffer[1]); + printf (" 2 %02x, %02x \r \n", id[2],read_buffer[2]); + printf (" 3 %02x, %02x\r \n", id[3],read_buffer[3]);*/ + + size_buffer = sizeof(read_buffer); + //printf("The size is %d, buff %d", size_buffer,sizeof(buff)); + + /*for (i = 4; i < 516; i +=16) + { + printf("\n%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", + buff[i], buff[i+1], buff[i+2], buff[i+3], buff[i+4], buff[i+5], buff[i+6], buff[i+7], buff[i+8], + buff[i+9], buff[i+10], buff[i+11], buff[i+12], buff[i+13], buff[i+14], buff[i+15]); + } + for (i = 0; i < 512; i +=16) + { + printf("\n%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", + read_buffer[i], read_buffer[i+1], read_buffer[i+2], read_buffer[i+3], read_buffer[i+4], read_buffer[i+5], read_buffer[i+6], + read_buffer[i+7], read_buffer[i+8], + read_buffer[i+9], read_buffer[i+10], read_buffer[i+11], read_buffer[i+12], read_buffer[i+13], read_buffer[i+14], read_buffer[i+15]); + }*/ + memcpy (&buff[4], read_buffer, 28); + + size_checksum= GetCheckSum((unsigned int *)(&buff[16]), 125); + // printf("The checksum size is %d",size_checksum); + + buff[12]= (size_checksum & 0xFF); + buff[13]= ((size_checksum >> 8) & 0xFF); + buff[14]= ((size_checksum >> 16) & 0xFF); + buff[15]= ((size_checksum >> 24) & 0xFF); + + // printf("checksum 0x%08x\n", size_checksum); + /* for (i = 4; i < 516; i +=16) + { + printf("\n%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", + buff[i], buff[i+1], buff[i+2], buff[i+3], buff[i+4], buff[i+5], buff[i+6], buff[i+7], buff[i+8], + buff[i+9], buff[i+10], buff[i+11], buff[i+12], buff[i+13], buff[i+14], buff[i+15]); + }*/ + + // if(((id[0] == ffffffA1) || (id[0] == ffffffA2) || (id[0] == ffffffA3)) && (id[1] == 08)) + if((silicon_id == 0x08A1) || (silicon_id == 0x08A2) || (silicon_id == 0x08A3)) + { + + rStatus= CyWriteDeviceConfig(handle,&buff[4]); + if (rStatus == CY_SUCCESS){ + printf(" Programming Flash is done"); + } + else + { + printf("Not done"); + } + } + else + { + printf("wrong silicon id"); + } + + fclose(fp); + + printf("\n File stream closed \n"); + + + + rStatus= CyClose(handle); + if (rStatus == CY_SUCCESS){ + //printf("Device closed"); + } + else + { + printf("Not closed"); + } + + + break; + case 3: + exitApp = true; + CyLibraryExit (); + break; + } + }while (exitApp == false); + free (glDevice); +} +bool isCypressDevice (int deviceNum) { + CY_HANDLE handle; + unsigned char interfaceNum = 0; + unsigned char sig[6]; +int op; + CY_RETURN_STATUS rStatus; + rStatus = CyOpen (deviceNum, interfaceNum, &handle); + //op= libusb_detach_kernel_driver(handle,0); + if (rStatus == CY_SUCCESS){ + rStatus = CyGetSignature (handle, sig); + if (rStatus == CY_SUCCESS){ + CyClose (handle); + return true; + } + else { + CyClose (handle); + return false; + } + } + else + return false; +} +void printListOfDevices (bool isPrint) +{ + int index_i = 0, index_j = 0, i, j, countOfDevice = 0, devNum; + int length, index = 0, numInterfaces, interfaceNum; + bool set1 = false; + + unsigned char deviceID[CY_MAX_DEVICES]; + unsigned char functionality[64]; + CY_DEVICE_INFO deviceInfo; + CY_DEVICE_CLASS deviceClass[CY_MAX_INTERFACES]; + CY_DEVICE_TYPE deviceType[CY_MAX_INTERFACES]; + CY_RETURN_STATUS rStatus; + + deviceAddedRemoved = false; + CyGetListofDevices (&numDevices); + //printf ("The number of devices is %d \n", numDevices); + for (i = 0; i < numDevices; i++){ + for (j = 0; j< CY_MAX_INTERFACES; j++) + glDevice[i].interfaceFunctionality[j] = -1; + } + if (isPrint){ + printf ("\n\n---------------------------------------------------------------------------------\n"); + printf ("Device Number | VID | PID | INTERFACE NUMBER | FUNCTIONALITY \n"); + printf ("---------------------------------------------------------------------------------\n"); + } + cyDevices = 0; + for (devNum = 0; devNum < numDevices; devNum++){ + rStatus = CyGetDeviceInfo (devNum, &deviceInfo); + interfaceNum = 0; + if (!rStatus) + { + //if (isCypressDevice (devNum)){ + // continue; + //} + strcpy (functionality, "NA"); + numInterfaces = deviceInfo.numInterfaces; + glDevice[index].numInterface = numInterfaces; + cyDevices++; + + while (numInterfaces){ + if (deviceInfo.deviceClass[interfaceNum] == CY_CLASS_VENDOR) + { + glDevice[index].deviceNumber = devNum; + switch (deviceInfo.deviceType[interfaceNum]){ + case CY_TYPE_I2C: + glDevice[index].interfaceFunctionality[interfaceNum] = CY_TYPE_I2C; + strcpy (functionality, "VENDOR_I2C"); + glDevice[index].isI2c = true; + break; + case CY_TYPE_SPI: + glDevice[index].interfaceFunctionality[interfaceNum] = CY_TYPE_SPI; + strcpy (functionality, "VENDOR_SPI"); + glDevice[index].isSpi = true; + break; + default: + strcpy (functionality, "NA"); + break; + } + } + else if (deviceInfo.deviceClass[interfaceNum] == CY_CLASS_CDC){ + strcpy (functionality, "NA"); + } + if (isPrint) { + printf ("%d |%x |%x | %d | %s\n", \ + index, \ + deviceInfo.vidPid.vid, \ + deviceInfo.vidPid.pid, \ + interfaceNum, \ + functionality \ + ); + } + interfaceNum++; + numInterfaces--; + } + index++; + } + } + if (isPrint){ + printf ("---------------------------------------------------------------------------------\n\n"); + } + printf("Cydevices %d",cyDevices); +} + diff --git a/release/tinio/Makefile b/release/tinio/Makefile index 56d2e19..04485c5 100644 --- a/release/tinio/Makefile +++ b/release/tinio/Makefile @@ -1,8 +1,19 @@ SHELL = /bin/bash CC=g++ -default: tinio +default: tinio utils tinio: echo "Building tinio..." - $(CC) -lcyusbserial -lusb-1.0 main.cpp -o tinio + $(CC) -lcyusbserial main.cpp -o tinio + +utils: + $(CC) -lcyusbserial Command_Utility.c -o cy-config + +install: + echo "Installing tinio and flasher" + cp tinio /usr/bin + cp cy-config /usr/bin + mkdir /usr/share/tinio + mkdir /usr/share/tinio/flashes + cp flashes/* /usr/share/tinio/flashes diff --git a/release/tinio/include/CyUSBBootloader.h b/release/tinio/include/CyUSBBootloader.h new file mode 100644 index 0000000..d47406f --- /dev/null +++ b/release/tinio/include/CyUSBBootloader.h @@ -0,0 +1,435 @@ +/* +## Cypress USB Serial Library header file (CyUSBSerial.h) +## =========================== +## +## Copyright Cypress Semiconductor Corporation, 2012-2013, +## All Rights Reserved +## UNPUBLISHED, LICENSED SOFTWARE. +## +## CONFIDENTIAL AND PROPRIETARY INFORMATION +## WHICH IS THE PROPERTY OF CYPRESS. +## +## Use of this file is governed +## by the license agreement included in the file +## +## /license/license.txt +## +## where is the Cypress software +## installation root directory path. +## +## =========================== +*/ + +#ifndef _INCLUDED_CYUSBBOOTLOADER_H_ +#define _INCLUDED_CYUSBBOOTLOADER_H_ + +/*This is to export windows API*/ +#ifdef CYWINEXPORT +#undef CYWINEXPORT +#endif +#ifdef WIN32 + +#ifdef CYUSBSERIAL_EXPORTS + #define CYWINEXPORT extern "C" __declspec(dllexport) + #define WINCALLCONVEN + #else + #define CYWINEXPORT extern "C" __declspec(dllimport) + #define WINCALLCONVEN + #endif +#else /*Linux and MAC*/ + #define CYWINEXPORT + #define WINCALLCONVEN + #ifndef BOOL + typedef bool BOOL; + #endif +#endif + +/* +Summary +Structure to hold Boot mode data buffer information. + +Description +This strucuture is used by boot mode data transaction API to perform read, write +operations. + +Before using a variable of this strucutre users need to initialize various members appropriately. + buffer - Need to be initialized to pre-allocated memory only, and user is + expected to deallocate the memory in his application. + length - Contains total length the buffer to be used while performing + read/write operations. + bytesReturned - Specifies the number of bytes actually read/written. + address - Address from where the data need to written/read + +See Also +CyReadFlash +CyProgFlash +CyVerifyFlash +CyReadMemory +CyWriteMemory + +CY_BOOTLOADER_VERSION +*/ +typedef struct _CY_BOOTLD_BUFFER { + + UCHAR *buffer; /*Address of the buffer*/ + UINT32 length; /*total length to be read/written */ + UINT32 *bytesReturned; /*Total length of bytes that was written/read*/ + UINT32 address; /*Address from where data needs to be written/read in device*/ + +} CY_BOOTLD_BUFFER,*PCY_BOOTLD_BUFFER; + +/* +Summary +This structure is used to hold Boot loader version. + +Description +This data type holds the information of version of the bootloader in device. It has major version, +minor version and patch number. + +See Also +CY_BOOTLD_BUFFER +*/ +typedef struct _CY_BOOTLOADER_VERSION { + + UCHAR majorVersion; /*Major version of BootLoader*/ + UCHAR minorVersion; /*Minor version of the BootLoader*/ + UINT16 patchNumber; /*Patch Number of the BootLoader*/ + +} CY_BOOTLOADER_VERSION; + + +/*************************************************************************************/ +/****************************BOOTLOADER API'S*****************************************/ +/*************************************************************************************/ + +/*@@BOOTLoader API + +These APIs provide an interface for configuring the device when it is in BOOT mode. + +The API's under this group gives user to option to configure the device when the device is in BOOT +mode. The APIs include support for device configuration, SCB level configuration, USB interface +configuration, checksum, firmware download. + +*/ + + +/* +Summary +This API retrieves the BootLoader version. + +Description +This API gets the bootloader version of the USB Serial device. + + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyGetSiliconID + +CY_BOOTLOADER_VERSION +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyGetBootLoaderVersion ( + CY_HANDLE handle, /*Valid device handle*/ + CY_BOOTLOADER_VERSION *bootLoaderVersion /*Boot Loader version.*/ + ); +/* +Summary +This API retrieves the silicon ID. + +Description +This API gets the silicon ID of the USB Serial device into the argument siliconID. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyGetBootLoaderVersion + +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyGetSiliconID ( + CY_HANDLE handle, /*Valid device handle*/ + UINT32 *siliconID /*Boot Loader version.*/ + ); + +/* +Summary +This API can be used to change the device operational mode from device firmware to bootloader. + +Description +This API changes the device operational mode from device firmware to bootloader or +Manufacturing mode. + +Call the API GetSignature to identify the current operational mode. This API should be called only +when the device is in firmware mode. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyGetSignature + +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyJumpToMfgMode ( + CY_HANDLE handle); + +/* +Summary +This API can be used to read device configuration + +Description +This API reads the device configuration from the device configuration table. It fills the device +configuration as a series of bytes in the argument deviceConfig + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyWriteDeviceConfig +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyReadDeviceConfig ( + CY_HANDLE handle, /* Valid device handle*/ + UCHAR *deviceConfig /* Device configuration value.*/ + ); + +/* +Summary +This API can be used to update the device configuration table. + +Description; +This API updates the device configuration in the configuration table of device. The device +configuration must be supplied as an array of bytes. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyReadDeviceConfig + +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyWriteDeviceConfig ( + CY_HANDLE handle, /*Valid Device handle*/ + UCHAR *deviceConfig /*Device configuration value */ + ); + +/* +Summary +This API can be used to read the content of flash from specified address. + +Description +The readBuffer structure must be filled and with address to be read from, appropriate buffer +and number of bytes to be read. + +The actual bytes read will be available in bytesReturned member of CY_BOOTLD_BUFFER. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CY_BOOTLD_BUFFER +CyProgFlash +CyVerifyFlash +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyReadFlash ( + CY_HANDLE handle, /*Valid device handle*/ + CY_BOOTLD_BUFFER *readBuffer, /*Buffer pointer containing buffer address, length and address of flash*/ + UINT32 timeout /*API timeout value*/ + ); + +/* +Summary +This API can be used to program the flash at specified address. + +Description +The writeBuffer structure must be filled and with address to be written to, appropriate buffer location +and number of bytes to be written. + +The actual bytes written will be available in bytesReturned member of CY_BOOTLD_BUFFER. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CY_BOOTLD_BUFFER +CyReadFlash +CyVerifyFlash +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyProgFlash ( + CY_HANDLE handle, /*Valid device handle*/ + CY_BOOTLD_BUFFER *writeBuffer, /*Buffer pointer containing the address of buffer pointer, length and address of flash*/ + UINT32 timeout /*API timeout value*/ + ); +/* +Summary +This API can be used to read the memory content of SRAM from specified address. + +Description +This API reads the content of flash in USB Serial device. The argument readBuffer need to be +initialized with address, number of bytes to be read and buffer location before invoking +this API. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CY_BOOTLD_BUFFER +CyWriteMemory + +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyReadMemory ( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + CY_BOOTLD_BUFFER *readBuffer, /*Bootloader read buffer details*/ + UINT32 timeout /*API timeout value*/ + ); + +/* +Summary +This API can be used to write content to SRAM at specified address. + +Description +This API writes the buffer content to SRAM. The argument writeBuffer need to be initialized with +target address, number of bytes to be written and buffer location before invoking this API. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CY_BOOTLD_BUFFER +CyReadMemory +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyWriteMemory ( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + CY_BOOTLD_BUFFER *writeBuffer, /*Bootloader write buffer details*/ + UINT32 timeout /*API timeout value*/ + ); + +/* +Summary +This API can be used calculate the checksum of the firmware loaded and compares it with the checksum in +device configuration table. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyUpdateChecksum +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyValidateChecksum ( + CY_HANDLE handle /*Valid handle to communicate with device*/ + ); +/* +Summary +This API can be used to read boot configuration. + +Description +This API reads the boot configuration from the boot configuration table of device. The bootConfig +need to be parsed to obtain actual configuration values. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyWriteBootConfig + +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyReadBootConfig ( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + UCHAR *bootConfig /*Current Boot configuration value read back*/ + ); +/* +Summary +This API updates the device boot configuration table. + +Description; +This API updates the boot configuration in the boot configuration table of device. +The bootConfig is pointer to an array of bytes contain the configuration. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyReadBootConfig +*/ + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyWriteBootConfig ( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + UCHAR *bootConfig /*Boot configuration value to be updated*/ + ); +/* +Summary +This API can be used to download firmware on to USB Serial device. + +Description; +This API downloads the firmware specified in filePath on to flash of the USB Serial device. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyReadBootConfig +CyWriteBootConfig +CyReadFlash +CyProgFlash +CyReadMemory +CyWriteMemory +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyDownloadFirmware ( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + CHAR *filePath /*Path of Firmware file*/ + ); + +/* +Summary +This API can be used enable flash configuration on USB Serial device. + +Description; +This API configures the the firmware and allows user to enable/diable flash changes. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyReadBootConfig +CyWriteBootConfig +CyReadFlash +CyProgFlash +CyReadMemory +CyWriteMemory +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyFlashConfigEnable ( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + BOOL enable /*Set to TRUE to enable flash configuration + FALSE to disable flash configuration */ + ); + +/* +Summary +This API can be used to obtain the Silicon Serial No. + +Description; +This API can be used to obtain the Silicon Serial No. + +Return Value +CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + +See Also +CyReadBootConfig +CyWriteBootConfig +CyReadFlash +CyProgFlash +CyReadMemory +CyWriteMemory +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetSiliconSerialID ( + CY_HANDLE handle, /*Valid device handle*/ + UCHAR buffer[8] /*Buffer to contain 8 bytes of data.*/ + ); + +#endif /* _INCLUDED_CYUSBBOOTLOADER_H_ */ \ No newline at end of file diff --git a/tinio/Makefile b/tinio/Makefile index 860bdf4..aeb1d61 100644 --- a/tinio/Makefile +++ b/tinio/Makefile @@ -1,2 +1,2 @@ tinio: - g++ -lusb-1.0 -lcyusbserial tinio.cpp + g++ -lcyusbserial tinio.cpp diff --git a/tinio/a.out b/tinio/a.out index 097b592..011496b 100755 Binary files a/tinio/a.out and b/tinio/a.out differ