📄 gnapplet.c
字号:
pkt_put_uint16(&pkt, data->phonebook_entry->memory_type); pkt_put_uint32(&pkt, data->phonebook_entry->location); SEND_MESSAGE_BLOCK(GNAPPLET_MSG_PHONEBOOK);}static gn_error gnapplet_write_phonebook(gn_data *data, struct gn_statemachine *state){ gnapplet_driver_instance *drvinst = DRVINSTANCE(state); int i; REQUEST_DEF; if (!data->phonebook_entry) return GN_ERR_INTERNALERROR; if (!data->phonebook_entry->name[0]) return gnapplet_delete_phonebook(data, state); pkt_put_uint16(&pkt, GNAPPLET_MSG_PHONEBOOK_WRITE_REQ); pkt_put_uint16(&pkt, data->phonebook_entry->memory_type); pkt_put_uint32(&pkt, data->phonebook_entry->location); pkt_put_uint16(&pkt, data->phonebook_entry->subentries_count + 2); pkt_put_uint16(&pkt, GN_PHONEBOOK_ENTRY_Name); pkt_put_uint16(&pkt, 0); pkt_put_string(&pkt, data->phonebook_entry->name); pkt_put_uint16(&pkt, GN_PHONEBOOK_ENTRY_Number); pkt_put_uint16(&pkt, GN_PHONEBOOK_NUMBER_General); pkt_put_string(&pkt, data->phonebook_entry->number); for (i = 0; i < data->phonebook_entry->subentries_count; i++) { pkt_put_uint16(&pkt, data->phonebook_entry->subentries[i].entry_type); pkt_put_uint16(&pkt, data->phonebook_entry->subentries[i].number_type); pkt_put_string(&pkt, data->phonebook_entry->subentries[i].data.number); } SEND_MESSAGE_BLOCK(GNAPPLET_MSG_PHONEBOOK);}static gn_error gnapplet_delete_phonebook(gn_data *data, struct gn_statemachine *state){ gnapplet_driver_instance *drvinst = DRVINSTANCE(state); REQUEST_DEF; if (!data->phonebook_entry) return GN_ERR_INTERNALERROR; pkt_put_uint16(&pkt, GNAPPLET_MSG_PHONEBOOK_DELETE_REQ); pkt_put_uint16(&pkt, data->phonebook_entry->memory_type); pkt_put_uint32(&pkt, data->phonebook_entry->location); SEND_MESSAGE_BLOCK(GNAPPLET_MSG_PHONEBOOK);}static gn_error gnapplet_memory_status(gn_data *data, struct gn_statemachine *state){ gnapplet_driver_instance *drvinst = DRVINSTANCE(state); REQUEST_DEF; if (!data->memory_status) return GN_ERR_INTERNALERROR; pkt_put_uint16(&pkt, GNAPPLET_MSG_PHONEBOOK_STATUS_REQ); pkt_put_uint16(&pkt, data->memory_status->memory_type); SEND_MESSAGE_BLOCK(GNAPPLET_MSG_PHONEBOOK);}static gn_error gnapplet_incoming_phonebook(int messagetype, unsigned char *message, int length, gn_data *data, struct gn_statemachine *state){ int i, n, type, subtype; gn_phonebook_entry *entry; gn_phonebook_subentry *se; REPLY_DEF; switch (code) { case GNAPPLET_MSG_PHONEBOOK_READ_RESP: if (!(entry = data->phonebook_entry)) return GN_ERR_INTERNALERROR; entry->empty = false; entry->caller_group = 5; entry->name[0] = '\0'; entry->number[0] = '\0'; entry->subentries_count = 0; memset(&entry->date, 0, sizeof(entry->date)); if (error != GN_ERR_NONE) return error; n = pkt_get_uint16(&pkt); assert(n < GN_PHONEBOOK_SUBENTRIES_MAX_NUMBER); for (i = 0; i < n; i++) { se = entry->subentries + entry->subentries_count; type = pkt_get_uint16(&pkt); subtype = pkt_get_uint16(&pkt); switch (type) { case GN_PHONEBOOK_ENTRY_Name: pkt_get_string(entry->name, sizeof(entry->name), &pkt); break; case GN_PHONEBOOK_ENTRY_Number: se->entry_type = type; se->number_type = subtype; se->id = 0; pkt_get_string(se->data.number, sizeof(se->data.number), &pkt); entry->subentries_count++; if (!entry->number[0]) { snprintf(entry->number, sizeof(entry->number), "%s", se->data.number); } break; case GN_PHONEBOOK_ENTRY_Date: se->entry_type = type; se->number_type = subtype; se->id = 0; pkt_get_timestamp(&se->data.date, &pkt); entry->subentries_count++; entry->date = se->data.date; break; default: se->entry_type = type; se->number_type = subtype; se->id = 0; pkt_get_string(se->data.number, sizeof(se->data.number), &pkt); entry->subentries_count++; break; } } break; case GNAPPLET_MSG_PHONEBOOK_WRITE_RESP: if (!(entry = data->phonebook_entry)) return GN_ERR_INTERNALERROR; if (error != GN_ERR_NONE) return error; entry->memory_type = pkt_get_uint16(&pkt); entry->location = pkt_get_uint32(&pkt); break; case GNAPPLET_MSG_PHONEBOOK_DELETE_RESP: if (!(entry = data->phonebook_entry)) return GN_ERR_INTERNALERROR; if (error != GN_ERR_NONE) return error; entry->memory_type = pkt_get_uint16(&pkt); entry->location = pkt_get_uint32(&pkt); break; case GNAPPLET_MSG_PHONEBOOK_STATUS_RESP: if (!data->memory_status) return GN_ERR_INTERNALERROR; if (error != GN_ERR_NONE) return error; data->memory_status->memory_type = pkt_get_uint16(&pkt); data->memory_status->used = pkt_get_uint32(&pkt); data->memory_status->free = pkt_get_uint32(&pkt); break; default: return GN_ERR_UNHANDLEDFRAME; } return GN_ERR_NONE;}static gn_error gnapplet_get_network_info(gn_data *data, struct gn_statemachine *state){ gnapplet_driver_instance *drvinst = DRVINSTANCE(state); REQUEST_DEF; if (!data->network_info) return GN_ERR_INTERNALERROR; pkt_put_uint16(&pkt, GNAPPLET_MSG_NETINFO_GETCURRENT_REQ); SEND_MESSAGE_BLOCK(GNAPPLET_MSG_NETINFO);}static gn_error gnapplet_get_rf_level(gn_data *data, struct gn_statemachine *state){ gnapplet_driver_instance *drvinst = DRVINSTANCE(state); REQUEST_DEF; if (!data->rf_unit || !data->rf_level) return GN_ERR_INTERNALERROR; pkt_put_uint16(&pkt, GNAPPLET_MSG_NETINFO_GETRFLEVEL_REQ); SEND_MESSAGE_BLOCK(GNAPPLET_MSG_NETINFO);}static gn_error gnapplet_incoming_netinfo(int messagetype, unsigned char *message, int length, gn_data *data, struct gn_statemachine *state){ gn_network_info *netinfo; uint16_t cellid, lac; uint32_t strength; REPLY_DEF; switch (code) { case GNAPPLET_MSG_NETINFO_GETCURRENT_RESP: if (!(netinfo = data->network_info)) return GN_ERR_INTERNALERROR; memset(netinfo, 0, sizeof(gn_network_info)); if (error != GN_ERR_NONE) return error; cellid = pkt_get_uint16(&pkt); netinfo->cell_id[0] = cellid / 256; netinfo->cell_id[1] = cellid % 256; lac = pkt_get_uint16(&pkt); netinfo->LAC[0] = lac / 256; netinfo->LAC[1] = lac % 256; pkt_get_uint8(&pkt); /* registration status */ pkt_get_string(netinfo->network_code, sizeof(netinfo->network_code), &pkt); break; case GNAPPLET_MSG_NETINFO_GETRFLEVEL_RESP: if (!data->rf_unit || !data->rf_level) return GN_ERR_INTERNALERROR; if (error != GN_ERR_NONE) return error; *data->rf_unit = GN_RF_Percentage; *data->rf_level = pkt_get_uint8(&pkt); break; default: return GN_ERR_UNHANDLEDFRAME; } return GN_ERR_NONE;}static gn_error gnapplet_get_power_info(gn_data *data, struct gn_statemachine *state){ gnapplet_driver_instance *drvinst = DRVINSTANCE(state); REQUEST_DEF; if (!data->battery_unit && !data->battery_level && !data->power_source) return GN_ERR_INTERNALERROR; pkt_put_uint16(&pkt, GNAPPLET_MSG_POWER_INFO_REQ); SEND_MESSAGE_BLOCK(GNAPPLET_MSG_POWER);}static gn_error gnapplet_incoming_power(int messagetype, unsigned char *message, int length, gn_data *data, struct gn_statemachine *state){ uint8_t percent, source; REPLY_DEF; switch (code) { case GNAPPLET_MSG_POWER_INFO_RESP: percent = pkt_get_uint8(&pkt); source = pkt_get_uint8(&pkt); if (error != GN_ERR_NONE) return error; if (data->battery_unit) *data->battery_unit = GN_RF_Percentage; if (data->battery_level) *data->battery_level = percent; if (data->power_source) *data->power_source = source; break; default: return GN_ERR_UNHANDLEDFRAME; } return GN_ERR_NONE;}static gn_error gnapplet_incoming_debug(int messagetype, unsigned char *message, int length, gn_data *data, struct gn_statemachine *state){ char msg[1024]; REPLY_DEF; switch (code) { case GNAPPLET_MSG_DEBUG_NOTIFICATION: if (error != GN_ERR_NONE) return error; pkt_get_string(msg, sizeof(msg), &pkt); dprintf("PHONE: %s\n", msg); break; default: return GN_ERR_UNHANDLEDFRAME; } return GN_ERR_UNSOLICITED;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -