示例#1
0
/**
 * @param readers Probably should be an empty list.
 */
list *find_all_readers(struct list *readers) {
  int rc;
  struct ftdi_device_list *devlist;
  struct ftdi_context ftdi;

  ftdi_init(&ftdi);
  rc = ftdi_usb_find_all(&ftdi, &devlist, RFID1_VID, RFID1_PID);
  ftdi_deinit(&ftdi);

  if(rc < 0) return NULL;

  struct ftdi_device_list *dp = devlist;
  while(dp){
    struct ftdi_context *c = malloc(sizeof(struct ftdi_context));
    if(c == NULL){
      // Out of memory !!
      // TODO: Clean up
      return NULL;
    }
    ftdi_init(c);

    struct reader *r = reader_create();
    reader_init(r, c, dp->dev);
    list_push(readers, r);

    dp = dp->next;
  }

  ftdi_list_free(&dp);

  return readers;
}
示例#2
0
文件: preader.c 项目: CKehl/nn-c
preader* preader_create2(char* fname)
{
    preader* pr = malloc(sizeof(preader));

    pr->g = NULL;
    pr->r = reader_create(fname);

    return pr;
}
示例#3
0
文件: lisp.c 项目: qyqx/wisp
object_t *lisp_read_string (object_t * lst)
{
  DOC ("Parse a string into a sexp or list object.");
  REQ (lst, 1, c_sym ("eval-string"));
  object_t *stro = CAR (lst);
  if (!STRINGP (stro))
    THROW (wrong_type, UPREF (stro));
  char *str = OSTR (stro);
  reader_t *r = reader_create (NULL, str, "eval-string", 0);
  object_t *sexp = read_sexp (r);
  reader_destroy (r);
  if (sexp == err_symbol)
    THROW (c_sym ("parse-error"), UPREF (stro));
  return sexp;
}
示例#4
0
文件: format.c 项目: renatomaia/TIER
static int new_reader(lua_State* L)
{
	void* handle;
	reader_api api; 	
	
	int type = lua_type(L, 1);
	switch(type)
	{
		case LUA_TUSERDATA:	
			handle = luaL_testudata(L, 1, IN_MEMORY_STREAM);
			if(handle)
			{
				api.read  = (stream_write_t)&inmemory_stream_read;
				api.close = (stream_close_t)&inmemory_stream_close;
				break;
			}
			
			handle = luaL_testudata(L, 1, LUA_FILEHANDLE);
			if(handle)
			{
				luaL_Stream* stream = handle;
				handle	  = stream->f;
				api.read  = (stream_read_t)&fread;
				api.close = (stream_close_t)&fclose;
				break;
			}

			luaL_error(L, "Inputstream expected");	
		case LUA_TTABLE: 
			luaL_error(L, "Cannot yet use lua table writers");
		break;
		default:
			luaL_error(L, "Inputstream expected");
			break;
	}
		
	char*	 udata		= create_userdata(L, sizeof(reader_t) + 4096, READER_META_TABLE);
	reader_t* reader 	= (reader_t*)udata;
	uint8_t*  buffer	= (uint8_t*)(udata + sizeof(reader_t));
	*reader = reader_create(handle, api, buffer, 4096);
		
	return 1;
}
示例#5
0
文件: reader.c 项目: qyqx/wisp
/* Use the core functions above to eval each sexp in a file. */
int load_file (FILE * fid, char *filename, int interactive)
{
  if (fid == NULL)
    {
      fid = fopen (filename, "r");
      if (fid == NULL)
	return 0;
    }
  reader_t *r = reader_create (fid, NULL, filename, interactive);
  while (!r->eof)
    {
      object_t *sexp = read_sexp (r);
      if (sexp != err_symbol)
	{
	  object_t *ret = top_eval (sexp);
	  if (r->interactive && ret != err_symbol)
	    obj_print (ret, 1);
	  obj_destroy (sexp);
	  obj_destroy (ret);
	}
    }
  reader_destroy (r);
  return 1;
}