Ticket #705: voice_recognition.diff

File voice_recognition.diff, 6.2 KB (added by tegzed, 9 years ago)

improved voice recognition patch and added support for toggling norting and 2D/3D view

  • binding/dbus/binding_dbus.c

     
    947947
    948948/* navit */
    949949
     950/**
     951 *      * @brief Sends recognized voice data
     952 *      * @param connection The DBusConnection object through which \a message arrived
     953 *      * @param message The DBusMessage containing the coordinates
     954 *      * @returns An empty reply if everything went right, otherwise DBUS_HANDLER_RESULT_NOT_YET_HANDLED
     955 *      */
     956       
     957        static DBusHandlerResult
     958        request_navit_add_voice_data(DBusConnection *connection, DBusMessage *message)
     959        {
     960        struct navit *navit;
     961        char *voice_data;
     962        DBusMessageIter iter;
     963       
     964        navit=object_get_from_message(message, "navit");
     965        if (! navit)
     966        return dbus_error_invalid_object_path(connection, message);
     967       
     968        dbus_message_iter_init(message, &iter);
     969        dbus_message_iter_get_basic(&iter, &voice_data);
     970       
     971        navit_add_voice_data(navit, voice_data);
     972       
     973        return empty_reply(connection, message);
     974        }
     975
     976
     977
     978
    950979static DBusHandlerResult
    951980request_navit_draw(DBusConnection *connection, DBusMessage *message)
    952981{
     
    15681597        {".navit",  "set_destination",     "(iii)s",  "(projection,longitude,latitude)comment",  "",   "",      request_navit_set_destination},
    15691598        {".navit",  "clear_destination",   "",        "",                                        "",   "",      request_navit_clear_destination},
    15701599        {".navit",  "evaluate",            "s",       "command",                                 "s",  "",      request_navit_evaluate},
     1600        {".navit",  "add_voice_data",      "s",       "voice_data",                              "",   "",      request_navit_add_voice_data},
    15711601        {".map",    "get_attr",            "s",       "attribute",                               "sv",  "attrname,value", request_map_get_attr},
    15721602        {".map",    "set_attr",            "sv",      "attribute,value",                         "",   "",      request_map_set_attr},
    15731603        {".mapset", "attr_iter",           "",        "",                                        "o",  "attr_iter",  request_mapset_attr_iter},
  • graphics.c

     
    5050#include "callback.h"
    5151#include "file.h"
    5252#include "event.h"
     53#include "keys.h"
     54#include "navit.h"
    5355
    5456
    5557//##############################################################################################################
     
    25062508                curr=g_list_next(curr);
    25072509        }
    25082510}
     2511
     2512struct external_key_navit_key {
     2513        char* key_str;
     2514        int   navit_key;
     2515};
     2516
     2517static struct external_key_navit_key external_key_navit_key_map[] =
     2518        {
     2519                {"ENTER"   , NAVIT_KEY_RETURN    },
     2520                {"ESCAPE"  , NAVIT_KEY_BACK      },
     2521                {"UP"      , NAVIT_KEY_UP        },
     2522                {"DOWN"    , NAVIT_KEY_DOWN      },
     2523                {"LEFT"    , NAVIT_KEY_LEFT      },
     2524                {"RIGHT"   , NAVIT_KEY_RIGHT     },
     2525                {"ZOOM_OUT" , NAVIT_KEY_ZOOM_OUT  },
     2526                {"ZOOM_IN", NAVIT_KEY_ZOOM_IN   },
     2527        };
     2528
     2529void
     2530graphics_add_voice_data(struct graphics* this_, struct navit* nav, char *voice_data)
     2531{
     2532  char*tok = strtok(voice_data," ");
     2533  do {
     2534    if(tok) {
     2535      char keybuf[2];
     2536      keybuf[0] = 0;
     2537      keybuf[1] = '\0';
     2538
     2539      //check for virtual keys
     2540      int n = sizeof(external_key_navit_key_map)/sizeof(struct external_key_navit_key);
     2541      int i;
     2542      for(i=0;i<n;++i) {
     2543        if(!strcmp(external_key_navit_key_map[i].key_str,tok)) {
     2544          keybuf[0] = external_key_navit_key_map[i].navit_key;
     2545          break;
     2546        }
     2547      }
     2548
     2549      if(keybuf[0]) {
     2550        callback_list_call_attr_1 (this_->cbl, attr_keypress,
     2551                             (void *) keybuf);
     2552      }
     2553      //change sertain attributes
     2554      else if(!strcmp("NORTHING",tok)) {
     2555        struct attr orientation_attr;
     2556        if(navit_get_attr(nav,attr_orientation,&orientation_attr,NULL)) {
     2557          int orientation = orientation_attr.u.num;
     2558          if(orientation==-1 || orientation==0) {
     2559            orientation = -1 - orientation;
     2560          }
     2561          else {
     2562            orientation = 0;
     2563          }
     2564          orientation_attr.u.num = orientation;
     2565          navit_set_attr(nav,&orientation_attr);
     2566        }
     2567      }
     2568      else if(!strcmp("PITCH",tok)) {
     2569        struct attr pitch_attr;
     2570        if(navit_get_attr(nav,attr_pitch,&pitch_attr,NULL)) {
     2571          int pitch = pitch_attr.u.num;
     2572          if(pitch==0) {
     2573            pitch = 30;
     2574          }
     2575          else {
     2576            pitch = 0;
     2577          }
     2578          pitch_attr.u.num = pitch;
     2579        }
     2580        else {
     2581          pitch_attr.u.num = 0;
     2582        }
     2583        navit_set_attr(nav,&pitch_attr);
     2584      }
     2585      //attr_osd_configuration
     2586    }
     2587  } while((tok=strtok(NULL," ")));
     2588}
     2589
  • graphics.h

     
    136136struct point;
    137137struct point_rect;
    138138struct transformation;
     139struct navit;
    139140int graphics_set_attr(struct graphics *gra, struct attr *attr);
    140141void graphics_set_rect(struct graphics *gra, struct point_rect *pr);
    141142struct graphics *graphics_new(struct attr *parent, struct attr **attrs);
     
    190191void graphics_add_selection(struct graphics *gra, struct item *item, enum item_type type, struct displaylist *dl);
    191192void graphics_remove_selection(struct graphics *gra, struct item *item, enum item_type type, struct displaylist *dl);
    192193void graphics_clear_selection(struct graphics *gra, struct displaylist *dl);
     194void graphics_add_voice_data(struct graphics* this_, struct navit* nav, char *voice_data);
    193195/* end of prototypes */
    194196#ifdef __cplusplus
    195197}
  • navit.c

     
    26862686        g_free(this_);
    26872687}
    26882688
     2689
     2690void
     2691navit_add_voice_data(struct navit* this_, char *voice_data)
     2692{
     2693  graphics_add_voice_data(this_->gra, this_, voice_data);
     2694}
     2695
     2696
     2697
    26892698/** @} */
  • navit.h

     
    112112int navit_block(struct navit *this_, int block);
    113113void navit_destroy(struct navit *this_);
    114114void navit_command_add_table(struct navit*this_, struct command_table *commands, int count);
     115void navit_add_voice_data(struct navit* this_, char *voice_data);
    115116/* end of prototypes */
    116117#ifdef __cplusplus
    117118}