Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
8a68203d
Commit
8a68203d
authored
Jul 20, 2009
by
Dean Camera
Browse files
Added error codes to most StillImageHost demo commands.
parent
cf313989
Changes
4
Hide whitespace changes
Inline
Side-by-side
Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c
View file @
8a68203d
...
...
@@ -80,20 +80,24 @@ void SImage_SendBlockHeader(void)
}
/** 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 */
Pipe_SelectPipe
(
SIMAGE_EVENTS_PIPE
);
Pipe_Unfreeze
();
/* 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 */
Pipe_ClearIN
();
/* Freeze the event pipe again after use */
Pipe_Freeze
();
return
ErrorCode
;
}
/** 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] 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 */
Pipe_SelectPipe
(
SIMAGE_DATA_OUT_PIPE
);
Pipe_Unfreeze
();
/* 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 */
Pipe_ClearOUT
();
/* Freeze the pipe again after use */
Pipe_Freeze
();
return
ErrorCode
;
}
/** Function to receive the given data to the device, after a response block has been received.
...
...
Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h
View file @
8a68203d
...
...
@@ -50,6 +50,12 @@
/** Pipe number of the Still Image events pipe */
#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 */
#define COMMAND_DATA_TIMEOUT_MS 5000
...
...
@@ -101,8 +107,8 @@
/* Function Prototypes: */
void
SImage_SendBlockHeader
(
void
);
uint8_t
SImage_RecieveBlockHeader
(
void
);
void
SImage_RecieveEventHeader
(
void
);
void
SImage_SendData
(
void
*
Buffer
,
uint16_t
Bytes
);
uint8_t
SImage_RecieveEventHeader
(
void
);
uint8_t
SImage_SendData
(
void
*
Buffer
,
uint16_t
Bytes
);
uint8_t
SImage_ReadData
(
void
*
Buffer
,
uint16_t
Bytes
);
bool
SImage_IsEventReceived
(
void
);
uint8_t
SImage_ClearPipeStall
(
const
uint8_t
EndpointNum
);
...
...
Demos/Host/LowLevel/StillImageHost/StillImageHost.c
View file @
8a68203d
...
...
@@ -216,28 +216,28 @@ void StillImage_Task(void)
uint8_t
*
DeviceInfoPos
=
DeviceInfo
;
/* Skip over the data before the unicode device information strings */
DeviceInfoPos
+=
8
;
// Skip to VendorExtensionDesc String
DeviceInfoPos
+=
(
(
*
DeviceInfoPos
<<
1
)
+
1
);
// Skip over VendorExtensionDesc String
DeviceInfoPos
+=
2
;
// Skip over FunctionalMode
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 DevicePropCode Array
DeviceInfoPos
+=
(
4
+
(
*
(
uint32_t
*
)
DeviceInfoPos
<<
1
));
// Skip over ObjectFormatCode Array
DeviceInfoPos
+=
(
4
+
(
*
(
uint32_t
*
)
DeviceInfoPos
<<
1
));
// Skip over ObjectFormatCode Array
DeviceInfoPos
+=
8
;
// Skip to VendorExtensionDesc String
DeviceInfoPos
+=
(
1
+
UNICODE_STRING_LENGTH
(
*
DeviceInfoPos
));
// Skip over VendorExtensionDesc String
DeviceInfoPos
+=
2
;
// Skip over FunctionalMode
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 DevicePropCode Array
DeviceInfoPos
+=
(
4
+
(
*
(
uint32_t
*
)
DeviceInfoPos
<<
1
));
// Skip over ObjectFormatCode Array
DeviceInfoPos
+=
(
4
+
(
*
(
uint32_t
*
)
DeviceInfoPos
<<
1
));
// Skip over ObjectFormatCode Array
/* Extract and convert the Manufacturer Unicode string to ASCII and print it through the USART */
char
Manufacturer
[
*
DeviceInfoPos
];
UnicodeToASCII
(
DeviceInfoPos
,
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 */
char
Model
[
*
DeviceInfoPos
];
UnicodeToASCII
(
DeviceInfoPos
,
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 */
char
DeviceVersion
[
*
DeviceInfoPos
];
...
...
Demos/OTG/TestApp/TestApp.c
View file @
8a68203d
...
...
@@ -51,7 +51,7 @@ int main(void)
CheckButton
();
CheckTemperature
();
/* Clear
o
utput
-c
ompare flag (logic 1 clears the flag) */
/* Clear
millisecond timer's O
utput
C
ompare flag (logic 1 clears the flag) */
TIFR0
|=
(
1
<<
OCF0A
);
USB_USBTask
();
...
...
@@ -114,11 +114,12 @@ void CheckTemperature(void)
{
static
uint16_t
MSElapsed
=
0
;
/* Timer 0's compare flag is set every millisecond */
if
(
TIFR0
&
(
1
<<
OCF0A
))
MSElapsed
++
;
/* Task runs every 10000 ticks, 10 seconds for this demo */
if
(
MSElapsed
==
1000
)
if
(
MSElapsed
==
1000
0
)
{
printf_P
(
PSTR
(
"Current temperature: %d Degrees Celcius
\r\n\r\n
"
),
(
int8_t
)
Temperature_GetTemperature
());
...
...
@@ -135,6 +136,7 @@ void CheckButton(void)
static
uint16_t
DebounceMSElapsed
=
0
;
static
bool
IsPressed
;
/* Timer 0's compare flag is set every millisecond */
if
(
TIFR0
&
(
1
<<
OCF0A
))
DebounceMSElapsed
++
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment