00001
00006 #include "sceptre.h"
00007 #include "device.h"
00008 #include "thermo_device.h"
00009 #include "accelero_device.h"
00010 #include "sdcard_device.h"
00011 #include <reent.h>
00012 #include <errno.h>
00013 #include <string.h>
00014
00015
00016 device_table_array_t device_table_list[DEVICE_MAX_DESCRIPTORS] =
00017 {
00018 { &thermo_device },
00019 { &accelero_device },
00020
00021 { NULL },
00022 { NULL }
00023 };
00024
00025
00033 int device_find(struct _reent *p_reent, uint8_t device_type)
00034 {
00035 int i;
00036
00037
00038 for (i=0; i<DEVICE_MAX_DESCRIPTORS && device_table_list[i].p_item!=0; i++)
00039 {
00040 if (device_table_list[i].p_item->device_type==device_type) break;
00041 }
00042
00043
00044 if (i>=DEVICE_MAX_DESCRIPTORS || device_table_list[i].p_item==0)
00045 {
00046 p_reent->_errno = ENODEV;
00047 return -1;
00048 }
00049 return i;
00050 }
00051
00052
00053 #define MAX_RETRIES 3
00054
00058 void device_init(void)
00059 {
00060 int i, retries;
00061 for (i=0; device_table_list[i].p_item!=0; i++)
00062 {
00063 if (device_table_list[i].p_item->init!=NULL)
00064 {
00065 for (retries=MAX_RETRIES; retries; retries--)
00066 {
00067
00068 if (device_table_list[i].p_item->init()==false) break;
00069 }
00070 if (retries==0)
00071 {
00072 device_table_list[i].p_item->init();
00073 }
00074 }
00075 }
00076 }
00077
00078
00086 int device_find_by_name(const char *p_name, int *p_len)
00087 {
00088 int i;
00089
00090
00091 if (p_name[0]=='/')
00092 {
00093
00094 for (i=0; device_table_list[i].p_item; i++)
00095 {
00096 *p_len = strlen(device_table_list[i].p_item->p_name);
00097 if (strncmp(device_table_list[i].p_item->p_name,&p_name[1],*p_len)==0)
00098 {
00099
00100 if (p_name[*p_len+1]=='/')
00101 {
00102
00103 return i;
00104 }
00105 }
00106 }
00107 }
00108
00109 return -1;
00110 }
00111