00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00020 #include "sceptre.h"
00021 #include "device.h"
00022 #include "accelero.h"
00023 #include <stdlib.h>
00024
00025
00026 #ifdef ACCELERO_DEBUG
00027 #include <stdio.h>
00028 #endif
00029
00030
00031 int accelero_dev_open(struct _reent *p_reent, const char *p_name, int flags, int mode);
00032 _ssize_t accelero_dev_read(struct _reent *p_reent, int file, void *p_dst, size_t dst_size);
00033 _ssize_t accelero_dev_close(struct _reent *p_reent, int file);
00034
00035
00039 device_table_entry_t accelero_device =
00040 {
00041 "accelero",
00042 SCEPTRE_ACCELEROMETER,
00043 accelero_dev_open,
00044 accelero_dev_close,
00045 accelero_dev_read,
00046 NULL,
00047 NULL,
00048 NULL
00049 };
00050
00051
00072 int accelero_dev_open(struct _reent *p_reent, const char *p_name, int flags, int mode)
00073 {
00074 #ifdef ACCELERO_DEBUG
00075 printf("accelero_dev_open(%s,%d,%d)\n",p_name,flags,mode);
00076 #endif
00077
00078 accelero_init(atoi(p_name));
00079 return DEVICE(SCEPTRE_ACCELEROMETER);
00080 }
00081
00082
00098 _ssize_t accelero_dev_read(struct _reent *p_reent, int file, void *p_dst, size_t dst_size)
00099 {
00100 #ifdef ACCELERO_DEBUG
00101 printf("accelero_dev_read(%08x,%d,%08x,%d)\n",p_reent,file,p_dst,dst_size);
00102 #endif
00103
00104 int size = accelero_read(p_dst);
00105
00106 #ifdef ACCELERO_DEBUG
00107 for (int j=0; j<size/sizeof(float); j++) printf("%f ",((float*)p_dst)[j]);
00108 #endif
00109
00110 if (size<0) p_reent->_errno = ENODEV;
00111 return size;
00112 }
00113
00114
00125 _ssize_t accelero_dev_close(struct _reent *p_reent, int file)
00126 {
00127 accelero_sleep(ACCELEROMETER_OFF);
00128 return 0;
00129 }