mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-17 05:02:07 +00:00
Added error codes to most StillImageHost demo commands.
This commit is contained in:
parent
cf313989e6
commit
8a68203d34
@ -80,20 +80,24 @@ void SImage_SendBlockHeader(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Function to receive a PIMA event container from the attached still image device. */
|
/** Function to receive a PIMA event container from the attached still image device. */
|
||||||
void SImage_RecieveEventHeader(void)
|
uint8_t SImage_RecieveEventHeader(void)
|
||||||
{
|
{
|
||||||
|
uint8_t ErrorCode;
|
||||||
|
|
||||||
/* Unfreeze the events pipe */
|
/* Unfreeze the events pipe */
|
||||||
Pipe_SelectPipe(SIMAGE_EVENTS_PIPE);
|
Pipe_SelectPipe(SIMAGE_EVENTS_PIPE);
|
||||||
Pipe_Unfreeze();
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
/* Read in the event data into the global structure */
|
/* Read in the event data into the global structure */
|
||||||
Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock));
|
ErrorCode = Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock));
|
||||||
|
|
||||||
/* Clear the pipe after read complete to prepare for next event */
|
/* Clear the pipe after read complete to prepare for next event */
|
||||||
Pipe_ClearIN();
|
Pipe_ClearIN();
|
||||||
|
|
||||||
/* Freeze the event pipe again after use */
|
/* Freeze the event pipe again after use */
|
||||||
Pipe_Freeze();
|
Pipe_Freeze();
|
||||||
|
|
||||||
|
return ErrorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Function to receive a PIMA response container from the attached still image device. */
|
/** Function to receive a PIMA response container from the attached still image device. */
|
||||||
@ -193,20 +197,24 @@ uint8_t SImage_RecieveBlockHeader(void)
|
|||||||
* \param[in] Buffer Source data buffer to send to the device
|
* \param[in] Buffer Source data buffer to send to the device
|
||||||
* \param[in] Bytes Number of bytes to send
|
* \param[in] Bytes Number of bytes to send
|
||||||
*/
|
*/
|
||||||
void SImage_SendData(void* Buffer, uint16_t Bytes)
|
uint8_t SImage_SendData(void* Buffer, uint16_t Bytes)
|
||||||
{
|
{
|
||||||
|
uint8_t ErrorCode;
|
||||||
|
|
||||||
/* Unfreeze the data OUT pipe */
|
/* Unfreeze the data OUT pipe */
|
||||||
Pipe_SelectPipe(SIMAGE_DATA_OUT_PIPE);
|
Pipe_SelectPipe(SIMAGE_DATA_OUT_PIPE);
|
||||||
Pipe_Unfreeze();
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
/* Write the data contents to the pipe */
|
/* Write the data contents to the pipe */
|
||||||
Pipe_Write_Stream_LE(Buffer, Bytes);
|
ErrorCode = Pipe_Write_Stream_LE(Buffer, Bytes);
|
||||||
|
|
||||||
/* Send the last packet to the attached device */
|
/* Send the last packet to the attached device */
|
||||||
Pipe_ClearOUT();
|
Pipe_ClearOUT();
|
||||||
|
|
||||||
/* Freeze the pipe again after use */
|
/* Freeze the pipe again after use */
|
||||||
Pipe_Freeze();
|
Pipe_Freeze();
|
||||||
|
|
||||||
|
return ErrorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Function to receive the given data to the device, after a response block has been received.
|
/** Function to receive the given data to the device, after a response block has been received.
|
||||||
|
@ -51,6 +51,12 @@
|
|||||||
/** Pipe number of the Still Image events pipe */
|
/** Pipe number of the Still Image events pipe */
|
||||||
#define SIMAGE_EVENTS_PIPE 0x03
|
#define SIMAGE_EVENTS_PIPE 0x03
|
||||||
|
|
||||||
|
/** Length in bytes of a given Unicode string's character length
|
||||||
|
*
|
||||||
|
* \param[in] chars Total number of Unicode characters in the string
|
||||||
|
*/
|
||||||
|
#define UNICODE_STRING_LENGTH(chars) (chars << 1)
|
||||||
|
|
||||||
/** Timeout period between the issuing of a command to a device, and the reception of the first packet */
|
/** Timeout period between the issuing of a command to a device, and the reception of the first packet */
|
||||||
#define COMMAND_DATA_TIMEOUT_MS 5000
|
#define COMMAND_DATA_TIMEOUT_MS 5000
|
||||||
|
|
||||||
@ -101,8 +107,8 @@
|
|||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
void SImage_SendBlockHeader(void);
|
void SImage_SendBlockHeader(void);
|
||||||
uint8_t SImage_RecieveBlockHeader(void);
|
uint8_t SImage_RecieveBlockHeader(void);
|
||||||
void SImage_RecieveEventHeader(void);
|
uint8_t SImage_RecieveEventHeader(void);
|
||||||
void SImage_SendData(void* Buffer, uint16_t Bytes);
|
uint8_t SImage_SendData(void* Buffer, uint16_t Bytes);
|
||||||
uint8_t SImage_ReadData(void* Buffer, uint16_t Bytes);
|
uint8_t SImage_ReadData(void* Buffer, uint16_t Bytes);
|
||||||
bool SImage_IsEventReceived(void);
|
bool SImage_IsEventReceived(void);
|
||||||
uint8_t SImage_ClearPipeStall(const uint8_t EndpointNum);
|
uint8_t SImage_ClearPipeStall(const uint8_t EndpointNum);
|
||||||
|
@ -217,7 +217,7 @@ void StillImage_Task(void)
|
|||||||
|
|
||||||
/* Skip over the data before the unicode device information strings */
|
/* Skip over the data before the unicode device information strings */
|
||||||
DeviceInfoPos += 8; // Skip to VendorExtensionDesc String
|
DeviceInfoPos += 8; // Skip to VendorExtensionDesc String
|
||||||
DeviceInfoPos += ((*DeviceInfoPos << 1) + 1); // Skip over VendorExtensionDesc String
|
DeviceInfoPos += (1 + UNICODE_STRING_LENGTH(*DeviceInfoPos)); // Skip over VendorExtensionDesc String
|
||||||
DeviceInfoPos += 2; // Skip over FunctionalMode
|
DeviceInfoPos += 2; // Skip over FunctionalMode
|
||||||
DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over OperationCode Array
|
DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over OperationCode Array
|
||||||
DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over EventCode Array
|
DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over EventCode Array
|
||||||
@ -230,14 +230,14 @@ void StillImage_Task(void)
|
|||||||
UnicodeToASCII(DeviceInfoPos, Manufacturer);
|
UnicodeToASCII(DeviceInfoPos, Manufacturer);
|
||||||
printf_P(PSTR(" Manufacturer: %s\r\n"), Manufacturer);
|
printf_P(PSTR(" Manufacturer: %s\r\n"), Manufacturer);
|
||||||
|
|
||||||
DeviceInfoPos += ((*DeviceInfoPos << 1) + 1); // Skip over Manufacturer String
|
DeviceInfoPos += 1 + UNICODE_STRING_LENGTH(*DeviceInfoPos); // Skip over Manufacturer String
|
||||||
|
|
||||||
/* Extract and convert the Model Unicode string to ASCII and print it through the USART */
|
/* Extract and convert the Model Unicode string to ASCII and print it through the USART */
|
||||||
char Model[*DeviceInfoPos];
|
char Model[*DeviceInfoPos];
|
||||||
UnicodeToASCII(DeviceInfoPos, Model);
|
UnicodeToASCII(DeviceInfoPos, Model);
|
||||||
printf_P(PSTR(" Model: %s\r\n"), Model);
|
printf_P(PSTR(" Model: %s\r\n"), Model);
|
||||||
|
|
||||||
DeviceInfoPos += ((*DeviceInfoPos << 1) + 1); // Skip over Model String
|
DeviceInfoPos += 1 + UNICODE_STRING_LENGTH(*DeviceInfoPos); // Skip over Model String
|
||||||
|
|
||||||
/* Extract and convert the Device Version Unicode string to ASCII and print it through the USART */
|
/* Extract and convert the Device Version Unicode string to ASCII and print it through the USART */
|
||||||
char DeviceVersion[*DeviceInfoPos];
|
char DeviceVersion[*DeviceInfoPos];
|
||||||
|
@ -51,7 +51,7 @@ int main(void)
|
|||||||
CheckButton();
|
CheckButton();
|
||||||
CheckTemperature();
|
CheckTemperature();
|
||||||
|
|
||||||
/* Clear output-compare flag (logic 1 clears the flag) */
|
/* Clear millisecond timer's Output Compare flag (logic 1 clears the flag) */
|
||||||
TIFR0 |= (1 << OCF0A);
|
TIFR0 |= (1 << OCF0A);
|
||||||
|
|
||||||
USB_USBTask();
|
USB_USBTask();
|
||||||
@ -114,11 +114,12 @@ void CheckTemperature(void)
|
|||||||
{
|
{
|
||||||
static uint16_t MSElapsed = 0;
|
static uint16_t MSElapsed = 0;
|
||||||
|
|
||||||
|
/* Timer 0's compare flag is set every millisecond */
|
||||||
if (TIFR0 & (1 << OCF0A))
|
if (TIFR0 & (1 << OCF0A))
|
||||||
MSElapsed++;
|
MSElapsed++;
|
||||||
|
|
||||||
/* Task runs every 10000 ticks, 10 seconds for this demo */
|
/* Task runs every 10000 ticks, 10 seconds for this demo */
|
||||||
if (MSElapsed == 1000)
|
if (MSElapsed == 10000)
|
||||||
{
|
{
|
||||||
printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"),
|
printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"),
|
||||||
(int8_t)Temperature_GetTemperature());
|
(int8_t)Temperature_GetTemperature());
|
||||||
@ -135,6 +136,7 @@ void CheckButton(void)
|
|||||||
static uint16_t DebounceMSElapsed = 0;
|
static uint16_t DebounceMSElapsed = 0;
|
||||||
static bool IsPressed;
|
static bool IsPressed;
|
||||||
|
|
||||||
|
/* Timer 0's compare flag is set every millisecond */
|
||||||
if (TIFR0 & (1 << OCF0A))
|
if (TIFR0 & (1 << OCF0A))
|
||||||
DebounceMSElapsed++;
|
DebounceMSElapsed++;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user