int gpc_send_string(char *string, int len) { int i; for (i=0; i<(len / GP_STR_PAK_MAX_LEN); i++) { /* Send out the start byte for a string */ if (0 > ring_safe_write_ch(&gpc_output_ring, GP_MODE_STRING | GP_STR_PAK_MAX_LEN)) { return -1; } /* Send packet contents */ if (0 > ring_safe_write(&gpc_output_ring, (u8 *)(string + (i * GP_STR_PAK_MAX_LEN)), GP_STR_PAK_MAX_LEN)) { return -1; } } if (0 > ring_safe_write_ch(&gpc_output_ring, GP_MODE_STRING | (len % GP_STR_PAK_MAX_LEN))) { return -1; } if (0 > ring_safe_write(&gpc_output_ring, (u8 *)(string + (i * GP_STR_PAK_MAX_LEN)), (len % GP_STR_PAK_MAX_LEN))) { return -1; } if (gpc_hooks.trigger_output) gpc_hooks.trigger_output(gpc_hooks.trigger_output_data); return len; }
s32 ring_safe_write(struct ring * ring, u8 * data, ring_size_t size) { s32 i; for (i = 0; i < size; i++) { if (0 > ring_safe_write_ch(ring, data[i])) { return -i; } } return i; }